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

757

No shell do MongoDB, como listar todas as coleções do banco de dados atual que estou usando?

moedor de café
fonte

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
AdaTheDev
fonte
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).

Cameron
fonte
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
Bharadwaja Bapatla
fonte
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
53

> show tables

Dá o mesmo resultado que a resposta de Cameron.

Kevin Meredith
fonte
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()
Salvador Dalí
fonte
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
Tarun Gupta
fonte
15

Você pode usar show tablesou show collections.

lxg
fonte
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
Indrajeet Singh
fonte
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 .

kkk
fonte
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 .

Engr. Hasanuzzaman Sumon
fonte
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!

Sood
fonte
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'))})"
Bruno Bronosky
fonte
Isso é extremamente útil, obrigado.
Marco Craveiro
4

Em> = 2.x, você pode fazer

db.listCollections()

No 1.x você pode fazer

db.getCollectionNames()
Aniruddh Joshi
fonte
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

Hasib Kamal
fonte
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.

Pandit Shashikant
fonte
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.
Chanaka Caldera
fonte
1

mostrar coleções

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

PHINCY L PIOUS
fonte
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 .

Rahul
fonte
Meta post relacionado .
Peter Mortensen
0
show collections

ou

show tables

ou

db.getCollectionNames();
nixxo_raa
fonte
Como isso é diferente das respostas anteriores?
Peter Mortensen
nada além de melhorar minha conta.
nixxo_raa 11/03
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

Sahith Vibudhi
fonte
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) })
Amitesh
fonte
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
Anoop Sharma
fonte
se você colocar seu comando nas reticências, votará mal no seu -1.
blamb
Como isso é diferente das respostas anteriores?
Peter Mortensen