ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Menu Docs

db.getCollectionInfos()

db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Retorna uma array de documentos com informações de coleção ou visualização, como nome e opções, para o banco de dados atual. Os resultados dependem do privilégio do usuário. Para obter detalhes, consulte Acesso necessário.

O auxiliar db.getCollectionInfos() envolve o comando listCollections.

O método db.getCollectionInfos() tem o seguinte parâmetro opcional:

Parâmetro
Tipo
Descrição

filter

documento

Opcional. Um predicado de consulta para filtrar a lista de coleções.

Você pode especificar um predicado de query em qualquer um dos campos retornados db.getCollectionInfos()por.

nameOnly

booleano

Opcional. Um sinalizador para indicar se o comando deve retornar apenas o nome e o tipo (view, collection ou timeseries) ou retornar o nome e outras informações.

O valor padrão é false.

Quando nameOnly é true, sua expressão filter só pode filtrar com base no nome e tipo de uma collection. Nenhum outro campo está disponível.

authorizedCollections

booleano

Opcional. Um sinalizador, quando configurado para true e usado com nameOnly: true, que permite a um usuário sem o privilégio exigido (ou seja, ação listCollections no banco de dados) para executar o comando quando o controle de acesso é imposto.

Quando as opções authorizedCollections e nameOnly são definidas como true, o comando retorna apenas as collections para as quais o usuário tem privilégios. Por exemplo, se um usuário tiver find ação em collections específicas, o comando retornará somente estas collections; ou, se um usuário tiver find ou qualquer outra ação, no recurso do banco de dados, o comando listará todas as collections no banco de dados.

O valor padrão é false. Ou seja, o usuário deve ter a ação listCollections no banco de dados para executar o comando.

Para um usuário que tenha a ação listCollections no banco de dados, essa opção não tem efeito, pois o usuário tem privilégios para listar as collections no banco de dados.

Quando usado sem nameOnly: true, esta opção não tem efeito. Ou seja, o usuário deve ter os privilégios exigidos para executar o comando quando o controle de acesso é imposto. Caso contrário, o usuário não pode executar o comando.

Esse método está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Observação

Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

Como db.getCollectionInfos() funciona como encapsulador em torno de listCollections, os usuários precisarão ter os mesmos privilégios que listCollections quando o controle de acesso for imposto.

O comando listCollections exige a ação listCollections quando o controle de acesso é imposto. Os usuários devem ter privilégios que concedam a ação listCollections no banco de dados para executar listCollections.

Por exemplo, o comando a seguir concede o privilégio de executar db.getCollectionInfos() no banco de dados test:

{ resource: { db: "test", collection: "" }, actions: [ "listCollections" ] }

O papel integrado read fornece o privilégio para executar listCollections para um banco de dados específico.

Usuários sem o privilégio de read exigido podem executar listCollections quando authorizedCollections e nameOnly estão configurados para true. Neste caso, o comando retorna os nomes e tipos das collections onde o usuário tem privilégios.

Por exemplo, considere um usuário com um role que concede o seguinte privilégio find:

{ resource: { db: "sales", collection: "currentQuarter" }, actions: [ "find" ] }

O usuário pode executar listCollections se authorizedCollections e nameOnly estiverem definidos como true.

db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true,
nameOnly: true
}
)

A operação retorna o nome e o tipo da collection currentQuarter.

No entanto, as seguintes operações retornam um erro se o usuário não tiver a autorização de acesso necessária:

db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true
}
)
db.runCommand(
{
listCollections: 1.0,
nameOnly: true
}
)

O método mongosh show collections é semelhante a:

db.runCommand(
{
listCollections: 1.0,
authorizedCollections: true,
nameOnly: true
}
)
  • Para usuários com o acesso exigido, o show collections lista as collections fora do sistema para o banco de dados.

  • Para usuários sem o acesso exigido, o show collections lista somente as collections para as quais os usuários têm privilégios.

A partir do MongoDB 4.2, se o cliente que emitiu db.getCollectionInfos() se desconectar antes da conclusão da operação, o MongoDB marcará db.getCollectionInfos() para encerramento usando killOp.

Para executar em um nó do conjunto de réplicas, as operações delistCollections exigem que o nó esteja no estado PRIMARY ou SECONDARY. Se o nó estiver em outro estado, como STARTUP2, haverá erros na operação.

O seguinte retorna informações para todas as collections no banco de dados example:

use example
db.getCollectionInfos()

O método retorna uma array de documentos que contêm informações da collection:

[
{
"name" : "employees",
"type" : "collection",
"options" : {
"flags" : 1,
"validator" : {
"$or" : [
{
"phone" : {
"$exists" : true
}
},
{
"email" : {
"$exists" : true
}
}
]
}
},
"info" : {
"readOnly" : false,
"uuid" : UUID("222e18ca-4a10-4a42-a8fe-c39255cc4c55")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "example.employees"
}
},
{
"name" : "products",
"type" : "collection",
"options" : {
"flags" : 1
},
"info" : {
"readOnly" : false,
"uuid" : UUID("1bc898b2-3b91-45e4-9d8b-0be462d5a157")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "example.products"
}
},
{
"name" : "mylogs",
"type" : "collection",
"options" : {
"capped" : true,
"size" : 256
},
"info" : {
"readOnly" : true,
"uuid" : UUID("8e62116d-b6a0-490a-808c-258ccb7ea947")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "example.mylogs"
}
}
]

Para solicitar informações de collection para uma collection específica, especifique o nome da collection ao chamar o método, como no exemplo a seguir:

use example
db.getCollectionInfos( { name: "employees" } )

O método retorna uma array com um único documento que detalha as informações de collection para a collection employees no banco de dados example.

[
{
"name" : "employees",
"type" : "collection",
"options" : {
"flags" : 1,
"validator" : {
"$or" : [
{
"phone" : {
"$exists" : true
}
},
{
"email" : {
"$exists" : true
}
}
]
}
},
"info" : {
"readOnly" : false,
"uuid" : UUID("222e18ca-4a10-4a42-a8fe-c39255cc4c55")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "example.employees"
}
}
]

Você pode especificar um filtro em qualquer um dos campos retornados por db.getCollectionInfos().

Por exemplo, o comando a seguir retorna informações para todas as collections no banco de dados example onde info.readOnly é true:

use example
db.getCollectionInfos( { "info.readOnly" : true } )

O comando retorna o seguinte:

[
{
"name" : "mylogs",
"type" : "collection",
"options" : {
"capped" : true,
"size" : 256
},
"info" : {
"readOnly" : true,
"uuid" : UUID("8e62116d-b6a0-490a-808c-258ccb7ea947")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "example.mylogs"
}
}
]