Wie kann ich alle Sammlungen in der MongoDB-Shell auflisten?


757

Wie liste ich in der MongoDB-Shell alle Sammlungen für die aktuelle Datenbank auf, die ich verwende?

Antworten:


1159

Du kannst tun...

JavaScript (Shell):

db.getCollectionNames()

Node.js:

db.listCollections()

Nicht-JavaScript (nur Shell):

show collections

Der Grund, warum ich das Nicht-JavaScript nenne, ist folgender:

$ 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"
]

Wenn Sie wirklich diese süße, süße show collectionsAusgabe wollen, können Sie:

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

Schöne Funktion. Sie können das Array von Namen durchlaufen, um etwas anderes zu tun (z. B. alle Elemente aus den Sammlungen entfernen).
Hilton Perantunes


6
Können wir bitte db.listCollections()die hier gezeigte und grün eingecheckte Antwort erhalten? Ansonsten machen die Leute den gleichen Fehler, den ich unzählige Male gemacht habe, als sie zu dieser Antwort kamen - und versuchen zu verwenden, db.getCollectionNamesund der Fehler kommt zurück db.collectionNames is not a function.
Niftylettuce

22
@niftylettuce Bei dieser Frage geht es um die MongoDB-Shell, nicht um den node.js-Treiber. db.getCollectionNames()ist immer noch die richtige Antwort für die Shell.
JohnnyHK

424
> show collections

listet alle Sammlungen in der aktuell ausgewählten Datenbank auf, wie in der Befehlszeilenhilfe ( help) angegeben.


2
Sie können die Ausgabe der Show-Sammlungen nicht in einem Skript verwenden, aber Sie können x = db.getCollectionNames () ausführen, um ein Array aller Namen abzurufen.
ceteras

1
Was bedeuten die beiden nach jeder Sammlung aufgeführten Zahlen? Zwei Arten von Größen? content 1145.586MB / 1506.855MBzum Beispiel.
Dan Dascalescu

@Dan: Ich habe MongoDB seit einiger Zeit nicht mehr verwendet, aber ich gehe davon aus, dass es sich um die Größe der in der Sammlung gespeicherten Daten im Vergleich zum Gesamtbetrag handelt, der dieser Sammlung zugewiesen wurde (um kleinere Aktualisierungen und Wachstum zu bewältigen, ohne ständig neu zuweisen zu müssen neuer Platz für den gesamten Inhalt der Sammlung).
Cameron

265

Wie liste ich alle Sammlungen für die aktuelle Datenbank auf, die ich verwende?

Drei Methoden

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

So listen Sie alle Datenbanken auf :

show dbs

So geben Sie eine bestimmte Datenbank ein oder verwenden sie:

use databasename

So listen Sie alle Sammlungen auf :

show collections

Ausgabe:

collection1
collection2
system.indexes

(oder)

show tables

Ausgabe:

collection1
collection2
system.indexes

(oder)

db.getCollectionNames()

Ausgabe:

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

Eingabe oder Verwendung einer bestimmten Sammlung

use collectionname

1
+1 für die vollständigste Antwort. Das Illustrieren show tablesist sehr hilfreich für diejenigen, die aus einem relationalen DBMS-Hintergrund stammen.
Jeff Puckett

9
Nein, useist eine Datenbank zu verwenden, nichts mit Sammlungen zu tun
sjmeverett

1
wir können auch db.collections verwenden
Biplab Malakar


30

Abgesehen von den von anderen Personen vorgeschlagenen Optionen:

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

Es gibt auch eine andere Möglichkeit, die sehr praktisch sein kann, wenn Sie wissen möchten, wie die einzelnen Sammlungen erstellt wurden (z. B. handelt es sich um eine begrenzte Sammlung mit einer bestimmten Größe):

db.system.namespaces.find()

23

Zuerst müssen Sie eine Datenbank verwenden, um alle darin enthaltenen Sammlungen / Tabellen anzuzeigen.

>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

Sie können show tablesoder verwenden show collections.


2
@LalitKumarB: Wieso ist das so? Basierend auf anderen Antworten ist dies eine geeignete Antwort, die tatsächlich funktionieren könnte. Zumindest ist es ein Versuch zu antworten. Was es ist, ist eine Antwort auf eine sehr alte Frage, für die bereits mehrere richtige Antworten veröffentlicht wurden.
Roope Hakulinen

14

Versuchen:

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

Der Befehl zum Anzeigen aller Sammlungen in der MongoDB-Datenbank lautet

show collections

Bevor Sie den show collectionsBefehl ausführen, müssen Sie die Datenbank auswählen:

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

Um alle Datenbanken anzuzeigen, können Sie den Befehl verwenden

show dbs // Shows all the database names present

Weitere Informationen finden Sie unter Erste Schritte .


11

Wenn Sie alle Sammlungen der MongoDB-Shell (Befehlszeile) anzeigen möchten, verwenden Sie den Shell-Helfer.

show collections

Das zeigt alle Sammlungen für die aktuelle Datenbank. Wenn Sie alle Sammlungslisten aus Ihrer Anwendung abrufen möchten, können Sie die MongoDB-Datenbankmethode verwenden

db.getCollectionNames()

Weitere Informationen zum MongoDB-Shell-Helfer finden Sie in der mongoShell-Kurzreferenz .


11

Die folgenden Befehle in Mongoshell sind häufig.

show databases
show collections

Ebenfalls,

show dbs
use mydb
db.getCollectionNames()

Manchmal ist es nützlich, alle Sammlungen sowie die Indizes der Sammlungen anzuzeigen, die Teil des gesamten Namespace sind:

So würden Sie das machen:

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

Zwischen den drei Befehlen und diesem Ausschnitt sollten Sie gut abgedeckt sein!


8

Ich denke, eine der größten Verwirrungen ist der Unterschied zwischen dem, was Sie mit mongo(oder einer interaktiven / hybriden Shell) tun können, und dem, was Sie mit mongo --eval(oder einer reinen JavaScript-Shell) machen können. Ich halte diese hilfreichen Dokumente bereit:

Hier ist ein Beispiel für die Skripterstellung, die Sie sonst mit showBefehlen ausführen könnten :

# 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')
            )
        }
    )
"

Hinweis: Das funktioniert sehr gut als Einzeiler. (Aber bei Stack Overflow sieht es schrecklich aus.)

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

Das ist sehr nützlich, danke.
Marco Craveiro

4

Auf> = 2.x können Sie tun

db.listCollections()

Auf 1.x können Sie tun

db.getCollectionNames()

1
wie @JohnnyHK wies darauf hin , dies gilt nur für den Knoten Treiber und nicht der Mongo Mantel pro OP Frage
Jeff Puckett

@ JeffPuckettII Ich benutze Node nicht. Dies funktioniert perfekt für mich in Mongo Shell. Ich frage mich, warum es nicht würde?
Aniruddh Joshi

1
Ich verwende die MongoDB-Shell-Version: 3.2.6, und wenn ich sie ausführe, db.getCollectionNames()erhalte ich, [ "users" ]weil ich eine Benutzersammlung habe. Wenn ich es versuche, db.listCollections()dann ergibt es[thread1] TypeError: db.listCollections is not a function : @(shell):1:1
Jeff Puckett

3

Listen Sie alle Sammlungen aus der mongoShell auf:

  • db.getCollectionNames ()
  • Sammlungen zeigen
  • Tabellen anzeigen

Hinweis: Sammlungen werden aus der aktuellen Datenbank angezeigt, in der Sie sich gerade befinden


Wie unterscheidet sich das von früheren Antworten?
Peter Mortensen

3

Zum Umschalten in die Datenbank.

Durch:

Verwenden Sie das Beispiel {Ihr_Datenbankname} :

use friends

Wo friendsist der Name Ihrer Datenbank?

Dann schreibe:

db.getCollectionNames()
show collections

Dadurch erhalten Sie den Namen der Sammlungen.


Wie unterscheidet sich das von früheren Antworten?
Peter Mortensen

2
> show dbs        
anuradhfirst  0.000GB
local         0.000GB
> use anuradhfirst
switched to db anuradhfirst
> show collections
record
  • Verbinden Sie sich mit der MongoDB-Datenbank mit mongo. Dadurch wird die Verbindung gestartet.
  • Führen Sie dann den show dbsBefehl aus. Dies zeigt Ihnen alle vorhandenen / verfügbaren Datenbanken.
  • Wählen databaseSie dann die gewünschte aus. Oben ist es anuradhfirst. Dann renne use anuradhfirst. Dadurch wird zur gewünschten Datenbank gewechselt.
  • Führen Sie dann den show collectionsBefehl aus. Dies zeigt alles collectionsin Ihrer ausgewählten Datenbank an.

1

Sammlungen zeigen

Dieser Befehl funktioniert normalerweise in der MongoDB-Shell, sobald Sie zur Datenbank gewechselt haben.


1

Wenn Sie für MongoDB 3.0-Bereitstellungen mit der WiredTiger-Speicher-Engine db.getCollectionNames()eine Version der Mongo-Shell vor 3.0 oder eine Version des Treibers vor der 3.0-kompatiblen Version ausführen , db.getCollectionNames()werden keine Daten zurückgegeben, selbst wenn vorhandene Sammlungen vorhanden sind.

Weitere Details finden Sie hier .




0

Ich benutze listCollections(unterstützt MongoDB 3.0 und höher) für diesen Zweck.

Beispiel:

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

So rufen Sie weitere Informationen wie den Index der Sammlung ab:

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

So drucken Sie nur die Sammlungsnamen:

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

Ich denke, dies bietet mehr Flexibilität.

Lesen Sie mehr: 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" ]

Detaillierte Informationen zu jeder Sammlung:

db.runCommand( { listCollections: 1.0, authorizedCollections: true, nameOnly: true } )
  • Für Benutzer mit dem erforderlichen Zugriff (Berechtigungen, die die Aktion listCollections für die Datenbank gewähren) listet die Methode die Namen aller Sammlungen für die Datenbank auf.
  • Für Benutzer ohne den erforderlichen Zugriff listet die Methode nur die Sammlungen auf, für die die Benutzer Berechtigungen haben. Wenn ein Benutzer beispielsweise eine bestimmte Sammlung in einer Datenbank gefunden hat, gibt die Methode nur diese Sammlung zurück.

Auflisten von Sammlungslisten basierend auf einer Suchzeichenfolge.

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

Beispiel: Suchen Sie alle Sammlungen mit dem Namen "import"

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

Kann ich die Liste der Sammlung erhalten, die einen Namen wie Filter enthält?
Parveen

@Praveen - Ich habe meine Antwort aktualisiert, um eine Antwort auf Ihren Fall aufzunehmen. Ich hoffe, das hilft
Amitesh

Danke Amitesh. Ich habe mein Skript db.getCollectionNames () geschrieben. ForEach (Funktion (collName) {if (collName.startsWith ("TestCollection_")) {print ("Index für" + collName löschen); db.getCollection (collName) .dropIndex (" ts_1 ");}});
Parveen

-1

Verwenden Sie den folgenden Befehl aus der mongoShell:

show collections

Wenn Sie Ihren Befehl in Backticks setzen, stimmen Sie Ihre -1 ab.
Blamb

Wie unterscheidet sich das von früheren Antworten?
Peter Mortensen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.