2015-04-13 10 views
12

Sono relativamente nuovo a MongoDB e non sono riuscito a trovare una soluzione per quello che sto cercando.Iterate su tutto il database Mongo

Vorrei eseguire un'iterazione su tutti i database di mongo ed eseguire alcuni comandi su ciascuna raccolta di ciascun database. Posso eseguire il seguente comando per ottenere tutti i nomi DB:

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

Ma come faccio a database "switch" nel Ciclo Foreach in modo da poter eseguire query su ogni database? Voglio usare qualcosa come use db.name all'interno del ciclo ma non funziona.

+1

Perché lo vuoi? – styvane

risposta

29

È possibile utilizzare db.getSiblingDB() per passare da un database all'altro e db.getCollectionNames() per ottenere i nomi della raccolta. Si noti che è necessario eseguire il primo comando dal database admin per ottenere l'elenco dei database. Un breve script nella shell per ottenere ciò che si vuole fare sarebbe simile al seguente:

// 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

Grazie. Questo è esattamente quello che stavo cercando. –

+0

Felice che abbia aiutato! –