2015-04-13 1 views
12

Я относительно новичок в MongoDB, и я не смог найти решение для того, что я ищу.Идите по всей базе данных Mongo

Я хотел бы перебрать все базы данных mongo и выполнить некоторую команду для каждой коллекции каждой базы данных. Я могу запустить следующую команду, чтобы получить все имена ДБ:

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

Но как я «переключатель» базы данных в цикле ForEach, так что я могу запустить запрос к каждой базе данных? Я хочу использовать что-то вроде use db.name внутри цикла, но это не работает.

+1

Зачем вам это нужно? – styvane

ответ

29

Вы можете использовать db.getSiblingDB() для переключения между базами данных и db.getCollectionNames(), чтобы получить имена коллекций. Обратите внимание, что вам нужно запустить первую команду из базы данных admin, чтобы получить список баз данных. Короткий сценарий в оболочке для достижения того, что вы хотите сделать, будет выглядеть примерно так:

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

Спасибо. Это именно то, что я искал. –

+0

Рад, что это помогло! –

 Смежные вопросы

  • Нет связанных вопросов^_^