Como posso listar todas as coleções no shell do MongoDB?


Respostas:


1159

Você pode fazer...

JavaScript (shell):

db.getCollectionNames()

Node.js:

db.listCollections()

Não JavaScript (somente shell):

show collections

O motivo pelo qual chamo isso de não JavaScript é porque:

$ mongo prodmongo/app --eval "show collections"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
2016-10-26T19:34:34.886-0400 E QUERY    [thread1] SyntaxError: missing ; before statement @(shell eval):1:5

$ mongo prodmongo/app --eval "db.getCollectionNames()"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
[
    "Profiles",
    "Unit_Info"
]

Se você realmente deseja esse show collectionsresultado, você pode:

$ mongo prodmongo/app --eval "db.getCollectionNames().join('\n')"
MongoDB shell version: 3.2.10
connecting to: prodmongo/app
Profiles
Unit_Info

Bom recurso. Você pode percorrer a matriz de nomes para fazer outra coisa (por exemplo, remover todos os itens das coleções).
Hilton Perantunes


6
Podemos obter db.listCollections()a resposta mostrada aqui e verificada em verde? Caso contrário, as pessoas estão cometendo o mesmo erro que cometi inúmeras vezes quando chegam a essa resposta - e tentam usar db.getCollectionNamese o erro volta db.collectionNames is not a function.
niftylettuce

22
@niftylettuce Esta pergunta é sobre o shell do MongoDB, não sobre o driver node.js. db.getCollectionNames()ainda é a resposta certa para o shell.
precisa saber é o seguinte

424
> show collections

listará todas as coleções no banco de dados selecionado no momento, conforme indicado na linha de comando help ( help).


2
Você não pode usar a saída show collections em um script, mas pode-se fazer x = db.getCollectionNames () para obter uma matriz de todos os nomes.
Ceteras

1
O que significam os dois números listados após cada coleção? Dois tipos de tamanhos? content 1145.586MB / 1506.855MBpor exemplo.
Dan Dascalescu

@ Dan: Eu não uso o MongoDB há algum tempo, mas meu melhor palpite é que é o tamanho dos dados armazenados na coleção versus o valor total alocado para essa coleção (para lidar com pequenas atualizações e crescimento sem ter que realocar constantemente novo espaço para todo o conteúdo da coleção).
Cameron

265

Como faço para listar todas as coleções do banco de dados atual que estou usando?

Três métodos

  • show collections
  • show tables
  • db.getCollectionNames()

Para listar todos os bancos de dados :

show dbs

Para inserir ou usar um determinado banco de dados:

use databasename

Para listar todas as coleções :

show collections

Resultado:

collection1
collection2
system.indexes

(ou)

show tables

Resultado:

collection1
collection2
system.indexes

(ou)

db.getCollectionNames()

Resultado:

[ "collection1", "collection2", "system.indexes" ]

Para inserir ou usar determinada coleção

use collectionname

1
+1 para a resposta mais completa. ilustrar show tablesé bastante útil para quem vem de um fundo de dbms relacionais.
Jeff Puckett

9
Não, useé a utilização de uma base de dados, nada a ver com coleções
sjmeverett

1
também podemos usar o db.collections
Biplab Malakar


30

Além das opções sugeridas por outras pessoas:

show collections  // Output every collection
show tables
db.getCollectionNames() // Shows all collections as a list

Também há outra maneira que pode ser realmente útil se você quiser saber como cada uma das coleções foi criada (por exemplo, é uma coleção limitada com um tamanho específico):

db.system.namespaces.find()

23

Primeiro, você precisa usar um banco de dados para mostrar todas as coleções / tabelas dentro dele.

>show dbs
users 0.56787GB
test (empty)
>db.test.help() // this will give you all the function which can be used with this db
>use users
>show tables //will show all the collection in the db

15

Você pode usar show tablesou show collections.


2
@LalitKumarB: Como é isso? Com base em outras respostas, essa é a resposta adequada para isso que realmente pode funcionar. Pelo menos é uma tentativa de responder. O que é, é uma resposta a uma pergunta muito antiga que já tem várias respostas corretas postadas.
Roope Hakulinen

14

Tentar:

help // To show all help methods
show dbs  // To show all dbs
use dbname  // To select your db
show collections // To show all collections in selected db

12

O comando usado para exibir todas as coleções no banco de dados MongoDB é

show collections

Antes de executar o show collectionscomando, você deve selecionar o banco de dados:

use mydb // mydb is the name of the database being selected

Para ver todos os bancos de dados, você pode usar o comando

show dbs // Shows all the database names present

Para mais informações, visite o artigo Primeiros passos .


11

Se você deseja mostrar todas as coleções do shell do MongoDB (linha de comando), use o assistente de shell,

show collections

que mostra todas as coleções do banco de dados atual. Se você deseja obter todas as listas de coleções do seu aplicativo, pode usar o método de banco de dados MongoDB

db.getCollectionNames()

Para obter mais informações sobre o auxiliar de shell do MongoDB, consulte mongoReferência rápida do shell .


11

Os seguintes comandos no mongoshell são comuns.

show databases
show collections

Além disso,

show dbs
use mydb
db.getCollectionNames()

Às vezes, é útil ver todas as coleções, bem como os índices nas coleções que fazem parte do espaço para nome geral:

Aqui está como você faria isso:

db.getCollectionNames().forEach(function(collection) {
    indexes = db[collection].getIndexes();
    print("Indexes for " + collection + ":");
    printjson(indexes);
});

Entre os três comandos e esse trecho, você deve estar bem coberto!


8

Eu acho que uma das maiores confusões é a diferença entre o que você pode fazer com mongo(ou um shell interativo / híbrido) vs. mongo --eval(ou um shell JavaScript puro). Eu mantenho estes documentos úteis à mão:

Aqui está um exemplo de script que você poderia fazer com os showcomandos:

# List all databases and the collections in them

mongo --eval "
    db.getMongo().getDBNames().forEach(
        function(v, i){
            print(
                v + '\n\t' +
                db.getSiblingDB(v).getCollectionNames().join('\n\t')
            )
        }
    )
"

Nota: Isso funciona muito bem como uma linha. (Mas parece terrível no Stack Overflow.)

mongo --eval "db.getMongo().getDBNames().forEach(function(v, i){print(v+'\n\t'+db.getSiblingDB(v).getCollectionNames().join('\n\t'))})"

Isso é extremamente útil, obrigado.
Marco Craveiro

4

Em> = 2.x, você pode fazer

db.listCollections()

No 1.x você pode fazer

db.getCollectionNames()

1
como @JohnnyHK apontou isto só se aplica ao motorista nó e não o shell mongo por questão OP
Jeff Puckett

@JeffPuckettII Eu não uso o Node. Isso funciona perfeitamente para mim dentro do mongo shell. Eu me pergunto por que não?
Aniruddh Joshi

1
Estou executando a versão shell do MongoDB: 3.2.6 e quando executo db.getCollectionNames()recebo [ "users" ]porque tenho uma coleção de usuários. Se eu tentar db.listCollections(), em seguida, que resulta em[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett

3

Liste todas as coleções do mongoshell:

  • db.getCollectionNames ()
  • mostrar coleções
  • mostrar tabelas

Nota: As coleções serão exibidas no banco de dados atual em que você está atualmente


Como isso é diferente das respostas anteriores?
Peter Mortensen

3

Para mudar para o banco de dados.

De:

use o exemplo {your_database_name} :

use friends

Onde friendsé o nome do seu banco de dados.

Então escreva:

db.getCollectionNames()
show collections

Isso fornecerá o nome das coleções.


Como isso é diferente das respostas anteriores?
Peter Mortensen

2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • conecte-se ao banco de dados MongoDB usando mongo. Isso iniciará a conexão.
  • depois execute o show dbscomando. Isso mostrará todos os bancos de dados existentes / disponíveis.
  • depois selecione o que databasevocê deseja. No acima é anuradhfirst. Então corra use anuradhfirst. Isso mudará para o banco de dados que você deseja.
  • depois execute o show collectionscomando. Isso mostrará todo o collectionsinterior do banco de dados selecionado.

1

mostrar coleções

Esse comando geralmente funciona no shell do MongoDB depois que você alterna para o banco de dados.


1

Para implantações do MongoDB 3.0 usando o mecanismo de armazenamento WiredTiger, se você executar a db.getCollectionNames()partir de uma versão do mongo shell anterior à 3.0 ou de uma versão do driver anterior à versão compatível com 3.0, db.getCollectionNames()não retornará dados, mesmo se houver coleções existentes.

Para mais detalhes, consulte isso .




0

Eu uso listCollections(suporta MongoDB 3.0 e superior) para esse fim.

Exemplo:

db.runCommand({ listCollections: 1, filter: {}, nameOnly: true });

Para buscar mais informações como o índice da coleção:

db.runCommand({ listCollections: 1, filter: {}, nameOnly: false });

Para imprimir apenas os nomes da coleção:

db.runCommand({ listCollections: 1, filter: {}, nameOnly: true }).cursor.firstBatch.forEach(v => {print(v.name)})

Eu sinto que isso fornece mais flexibilidade.

Leia mais: listCollections


0
 1. show collections; // Display all collections
 2. show tables     // Display all collections
 3. db.getCollectionNames();   // Return array of collection. Example :[ "orders", "system.profile" ]

Informações detalhadas para cada coleção:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Para usuários com o acesso necessário (privilégios que concedem a ação listCollections no banco de dados), o método lista os nomes de todas as coleções do banco de dados.
  • Para usuários sem o acesso necessário, o método lista apenas as coleções para as quais os usuários têm privilégios. Por exemplo, se um usuário encontrar uma coleção específica em um banco de dados, o método retornará apenas essa coleção.

Para listar a lista de coleções com base em uma sequência de pesquisa.

db.getCollectionNames().filter(function (CollectionName) { return /<Search String>/.test(CollectionName) })

Exemplo: encontre toda a coleção com "importação" no nome

db.getCollectionNames().filter(function (CollectionName) { return /import/.test(CollectionName) })

Posso obter a lista de coleção que contém algum nome como filtro
Parveen 27/04

@ Praveen - Atualizei minha resposta para incluir a resposta para o seu caso. Espero que ajude
Amitesh

Obrigado Amitesh. Eu escrevi meu script db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("droping index for" + collName); db.getCollection (collName) .dropIndex (" ts_1 ");}});
Parveen 30/04

-1

Use o seguinte comando do mongoshell:

show collections

se você colocar seu comando nas reticências, votará mal no seu -1.
blamb

Como isso é diferente das respostas anteriores?
Peter Mortensen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.