Come posso elencare tutte le raccolte nella shell MongoDB?


757

Nella shell MongoDB, come posso elencare tutte le raccolte per il database corrente che sto usando?

Risposte:


1160

Tu puoi fare...

JavaScript (shell):

db.getCollectionNames()

Node.js:

db.listCollections()

Non JavaScript (solo shell):

show collections

Il motivo per cui lo chiamo non JavaScript è perché:

$ 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 vuoi davvero quella dolce, dolce show collectionsuscita, puoi:

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

Bella caratteristica. Puoi iterare attraverso la matrice di nomi per fare qualcos'altro (ad esempio rimuovere tutti gli elementi dalle raccolte).
Hilton Perantunes,


6
Possiamo per favore ricevere db.listCollections()la risposta mostrata qui e contrassegnata in verde? Altrimenti le persone commettono lo stesso errore che ho fatto innumerevoli volte quando arrivano a questa risposta - e tentano di usare db.getCollectionNamese l'errore ritorna db.collectionNames is not a function.
niftylettuce,

22
@niftylettuce Questa domanda riguarda la shell MongoDB, non il driver node.js. db.getCollectionNames()è ancora la risposta giusta per la shell.
JohnnyHK,

424
> show collections

elencherà tutte le raccolte nel DB attualmente selezionato, come indicato nella guida della riga di comando ( help).


2
Non è possibile utilizzare l'output delle raccolte show in uno script, ma si può fare x = db.getCollectionNames () per ottenere una matrice di tutti i nomi.
ceteras,

1
Cosa significano i due numeri elencati dopo ogni raccolta? Due tipi di dimensioni? content 1145.586MB / 1506.855MBper esempio.
Dan Dascalescu,

@Dan: non uso MongoDB da un po 'di tempo, ma la mia ipotesi migliore è che sia la dimensione dei dati archiviati nella raccolta rispetto all'importo totale assegnato a quella raccolta (per gestire gli aggiornamenti minori e la crescita senza dover riallocare costantemente nuovo spazio per l'intero contenuto della collezione).
Cameron,

265

Come posso elencare tutte le raccolte per il database corrente che sto usando?

Tre metodi

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

Per elencare tutti i database :

show dbs

Per accedere o utilizzare un determinato database:

use databasename

Per elencare tutte le raccolte :

show collections

Produzione:

collection1
collection2
system.indexes

(o)

show tables

Produzione:

collection1
collection2
system.indexes

(o)

db.getCollectionNames()

Produzione:

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

Per accedere o utilizzare una determinata raccolta

use collectionname

1
+1 per la risposta più completa. illustrare show tablesè abbastanza utile per coloro che provengono da uno sfondo di dbms relazionali.
Jeff Puckett,

9
no, useè usare un database, niente a che fare con le raccolte
sjmeverett,

1
possiamo anche usare db.collections
Malakar


30

Oltre alle opzioni suggerite da altre persone:

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

C'è anche un altro modo che può essere davvero utile se vuoi sapere come è stata creata ciascuna delle raccolte (ad esempio, è una raccolta limitata con una dimensione particolare):

db.system.namespaces.find()

23

Per prima cosa devi usare un database per mostrare tutte le raccolte / tabelle al suo interno.

>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

Puoi usare show tableso show collections.


2
@LalitKumarB: Come mai? Sulla base di altre risposte, questa è la risposta adatta a ciò che effettivamente potrebbe funzionare. Almeno è un tentativo di risposta. Di cosa si tratta, è una risposta a una domanda molto vecchia che ha già pubblicato più risposte corrette.
Roope Hakulinen,

14

Provare:

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

Il comando utilizzato per visualizzare tutte le raccolte nel database MongoDB è

show collections

Prima di eseguire il show collectionscomando è necessario selezionare il database:

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

Per visualizzare tutti i database, è possibile utilizzare il comando

show dbs // Shows all the database names present

Per ulteriori informazioni, visitare la sezione Introduzione .


11

Se vuoi mostrare tutte le raccolte dalla shell MongoDB (riga di comando), usa l'helper della shell,

show collections

che mostra tutte le raccolte per il database corrente. Se si desidera ottenere tutti gli elenchi di raccolte dall'applicazione, è possibile utilizzare il metodo del database MongoDB

db.getCollectionNames()

Per ulteriori informazioni sull'helper della shell MongoDB, è possibile consultare la mongoGuida rapida di Shell .


11

I seguenti comandi su mongoshell sono comuni.

show databases
show collections

Anche,

show dbs
use mydb
db.getCollectionNames()

A volte è utile vedere tutte le raccolte e gli indici sulle raccolte che fanno parte dello spazio dei nomi generale:

Ecco come lo faresti:

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

Tra i tre comandi e questo frammento, dovresti essere ben coperto!


8

Penso che una delle maggiori confusioni sia la differenza tra ciò che si può fare con mongo(o una shell interattiva / ibrida) vs. mongo --eval(o una shell JavaScript pura). Tengo a portata di mano questi documenti utili:

Ecco un esempio di scripting che cosa potresti fare altrimenti con i showcomandi:

# 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: funziona davvero bene come one-liner. (Ma sembra terribile su Stack Overflow.)

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

Questo è estremamente utile, grazie.
Marco Craveiro,

4

Su> = 2.x, puoi farlo

db.listCollections()

Su 1.x puoi fare

db.getCollectionNames()

1
come ha sottolineato @JohnnyHK , questo si applica solo al driver del nodo e non alla shell mongo per domanda OP
Jeff Puckett,

@JeffPuckettII Non uso Node. Questo funziona perfettamente per me all'interno del guscio di mongo. Mi chiedo perché non dovrebbe?
Aniruddh Joshi

1
Sto eseguendo la versione shell MongoDB: 3.2.6, e quando corro db.getCollectionNames()ottengo [ "users" ]perché ho una raccolta di utenti. Se provo db.listCollections(), il risultato è[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett,

3

Elencare tutte le raccolte dalla mongoshell:

  • db.getCollectionNames ()
  • mostra raccolte
  • mostra tabelle

Nota: le raccolte mostreranno dal database corrente in cui ci si trova attualmente


In che cosa differisce dalle risposte precedenti?
Peter Mortensen,

3

Per passare al database.

Di:

utilizzare l' esempio {nome_database_del} :

use friends

dov'è friendsil nome del tuo database.

Allora scrivi:

db.getCollectionNames()
show collections

Questo ti darà il nome delle collezioni.


In che cosa differisce dalle risposte precedenti?
Peter Mortensen,

2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • connettersi con il database MongoDB utilizzando mongo . Questo avvierà la connessione.
  • quindi eseguire il show dbscomando. Questo mostrerà tutti i database in uscita / disponibili.
  • quindi selezionare il databasedesiderato. Quanto sopra lo è anuradhfirst. Quindi corri use anuradhfirst. Questo passerà al database desiderato.
  • quindi eseguire il show collectionscomando. Questo mostrerà tutto collectionsall'interno del database selezionato.

1

mostra raccolte

Questo comando di solito funziona sulla shell MongoDB dopo essere passati al database.


1

Per le distribuzioni MongoDB 3.0 che utilizzano il motore di archiviazione WiredTiger, se si esegue db.getCollectionNames()da una versione della shell mongo precedente alla 3.0 o una versione del driver precedente alla versione 3.0 compatibile, non db.getCollectionNames()verranno restituiti dati, anche se sono presenti raccolte esistenti.

Per ulteriori dettagli, fare riferimento a questo .




0

Uso listCollections(supporta MongoDB 3.0 e versioni successive) per questo scopo.

Esempio:

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

Per recuperare ulteriori informazioni come l'indice della raccolta:

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

Per stampare solo i nomi delle raccolte:

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

Ritengo che ciò offra maggiore flessibilità.

Per saperne di più: 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" ]

Informazioni dettagliate per ogni collezione:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Per gli utenti con l'accesso richiesto (privilegi che concedono l'azione listCollections sul database), il metodo elenca i nomi di tutte le raccolte per il database.
  • Per gli utenti senza l'accesso richiesto, il metodo elenca solo le raccolte per le quali gli utenti dispongono dei privilegi. Ad esempio, se un utente ha trovato una raccolta specifica in un database, il metodo restituirà solo quella raccolta.

Per elencare l'elenco delle raccolte in base a una stringa di ricerca.

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

Esempio: trova tutta la raccolta con "importazione" nel nome

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

Posso ottenere l'elenco della raccolta che contiene un nome come filtro
Parveen

@Praveen - Ho aggiornato la mia risposta per includere la risposta al tuo caso. Spero che aiuti
Amitesh

Grazie Amitesh. Ho scritto il mio script db.getCollectionNames (). ForEach (function (collName) {if (collName.startsWith ("TestCollection_")) {print ("indice di rilascio per" + collName); db.getCollection (collName) .dropIndex (" ts_1 ");}});
Parveen

-1

Utilizzare il seguente comando dalla mongoshell:

show collections

se metti il ​​tuo comando in backtick, vota male il tuo -1.
blamb

In che cosa differisce dalle risposte precedenti?
Peter Mortensen l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.