2015-06-23 34 views
3

我有大約200個mongodb數據庫。 每個數據庫都有一個名爲'Group'的集合,在這個集合中有一個名爲'meldingId'的字段。mongodb從不同的數據庫中選擇

是否有可能創建一個mongodb查詢來查找不同數據庫中的所有值。

(我設法選擇數據庫BIJ通過selectDB($數據庫名稱)通過數據庫循環)

+0

在MongoDB 3.0中,您無法創建跨多個集合或數據庫的單個查詢。您可以編寫一個函數來迭代數據庫/集合,但仍然會導致每個名稱空間的查詢(這聽起來像您可能已經在做的事情)。 – Stennie

回答

2

在蒙戈外殼,這可以通過使用db.getSiblingDB()方法切換到管理數據庫,並得到一個列表來完成通過運行管理員命令db.runCommand({ "listDatabases": 1 })來管理200個數據庫。遍歷數據庫列表並使用db.getSiblingDB()再次在數據庫之間切換,查詢Group集合中的meldingId值。像這樣:

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

// Iterate through each database. 
dbs.forEach(function(database) { 
    db = db.getSiblingDB(database.name); 

    // Get the Group collection 
    collection = db.getCollection("Group"); 

    // Iterate through all documents in collection. 
    collection.find().forEach(function(doc) { 

     // Print the meldingId field. 
     print(doc.meldingId); 
    }); 

});