2015-04-13 29 views
12

MongoDB'ye nispeten yeniyim ve aradığım şey için bir çözüm bulamadım.Tüm Mongo veritabanı üzerinde yineleyin

Bütün Mongo veritabanlarını üzerinde yineleme ve her veritabanının her koleksiyonunda bazı komutu çalıştırmak istiyorum. Ben tüm db adlarını almak için aşağıdaki komutu çalıştırabilirsiniz:

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

Ama nasıl forEach döngü içinde "anahtarı" veritabanı yüzden her veritabanında sorguyu çalıştırabilirsiniz mı? Döngü içinde use db.name gibi bir şey kullanmak istiyorum ama bu işe yaramıyor.

+1

Neden bunu istiyorsunuz? – styvane

cevap

29

Sen toplama adlarını almak için veritabanları ve db.getCollectionNames() arasında geçiş yapmak için db.getSiblingDB() kullanabilirsiniz. Veritabanlarının listesini almak için ilk komutu admin veritabanından çalıştırmanız gerektiğini unutmayın. Yapmak istediğiniz şeyi elde etmek için kabukta kısa bir komut aşağıdaki gibi bir şey görecektir:

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

Teşekkürler. Tam olarak aradığım şey bu. –

+0

Yardım ettiğine sevindim! –