2015-04-13 11 views
12

Ich bin relativ neu in MongoDB und ich war nicht in der Lage, eine Lösung für das, wonach ich suche, zu finden.Iterate über alle Mongo-Datenbank

Ich würde gerne über alle Mongo-Datenbanken iterieren und einen Befehl für jede Sammlung jeder Datenbank ausführen. Ich kann den folgenden Befehl ausführen, um alle db Namen zu erhalten:

db.runCommand({ listDatabases: 1 }).databases.forEach(function (db) { 
    print ("db=" + db.name); 
}); 

Aber wie ich „Schalter“ Datenbank innerhalb foreach-Schleife, so kann ich Abfrage für jede Datenbank ausgeführt werden? Ich möchte etwas wie use db.name innerhalb der Schleife verwenden, aber das funktioniert nicht.

+1

Warum würden Sie das wollen? – styvane

Antwort

29

Sie können db.getSiblingDB() verwenden, um zwischen Datenbanken zu wechseln, und db.getCollectionNames(), um die Sammlungsnamen abzurufen. Beachten Sie, dass Sie den ersten Befehl aus der Datenbank admin ausführen müssen, um die Liste der Datenbanken abzurufen. Ein kurzes Skript in der Shell, um zu erreichen, was Sie tun möchten, würde etwa wie folgt aussehen:

// Switch to admin database and get list of databases. 
db = db.getSiblingDB("admin"); 
dbs = db.runCommand({ "listDatabases": 1 }).databases; 

// Iterate through each database and get its collections. 
dbs.forEach(function(database) { 
    db = db.getSiblingDB(database.name); 
    cols = db.getCollectionNames(); 

    // Iterate through each collection. 
    cols.forEach(function(col) { 

     // Do something with each collection. 
     print(col); 
    }); 

}); 
+0

Danke. Genau das habe ich gesucht. –

+0

Froh, dass es geholfen hat! –