Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

db.getCollectionInfos()

Nesta página

  • Definição
  • Acesso necessário
  • Comportamento
  • Exemplo
db.getCollectionInfos(filter, nameOnly, authorizedCollections)

Retorna uma array de documentos com informações de collection 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. Uma expressão de query para filtrar a lista de collections.

Você pode especificar uma expressão de query em qualquer um dos campos retornados por db.getCollectionInfos().

nameOnly
booleano

Opcional. Um sinalizador para indicar se o comando deve retornar apenas o nome e o tipo ou retornar o nome e outras informações.

Retornar apenas o nome e o tipo (view, collection ou timeseries) não exige travas no nível da collection, enquanto o retorno de informações completas da collection trava cada collection no banco de dados.

O valor padrão é false.

Observação

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.

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 configurados para 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"
}
}
]
← db.getCollection()