db.getCollectionInfos()
Nesta página
Definição
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 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 comandolistCollections
.O método
db.getCollectionInfos()
tem o seguinte parâmetro opcional:ParâmetroTipoDescriçãofilter
documentoOpcional. Um predicado de consulta para filtrar a lista de coleções.
Você pode especificar um predicado de query em qualquer um dos campos retornados por
db.getCollectionInfos()
.nameOnly
booleanoOpcional. Um sinalizador para indicar se o comando deve retornar apenas o nome e o tipo (
view
,collection
outimeseries
) ou retornar o nome e outras informações.O valor padrão é
false
.Quando
nameOnly
étrue
, sua expressãofilter
só pode filtrar com base no nome e tipo de uma collection. Nenhum outro campo está disponível.authorizedCollections
booleanoOpcional. Um sinalizador, quando configurado para
true
e usado comnameOnly: true
, que permite a um usuário sem o privilégio exigido (ou seja, açãolistCollections
no banco de dados) para executar o comando quando o controle de acesso é imposto.Quando as opções
authorizedCollections
enameOnly
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 tiverfind
ação em collections específicas, o comando retornará somente estas collections; ou, se um usuário tiverfind
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çãolistCollections
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.
Acesso necessário
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 } )
show collections
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.
Comportamento
Desconexão do cliente
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
.
Restrição de estado do membro do conjunto de réplica
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.
Exemplo
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" } } ]