Работайте со всеми базами данных из оболочки монго
У нас есть система со многими различными базами данных mongo. Я регулярно хочу писать специальные запросы, которые будут применяться ко всем (или их подмножествам), не имея априорного знания о том, какие базы данных существуют.
Я могу сделать show dbs
, который будет визуально распечатывать список, но есть ли способ сделать что-то вроде:
var db_list = listDatabases();
for (i = 0; i < db_list.length; i++) {
do_something(db_list[i])
}
Моя проблема с show dbs
заключается в том, что она не отображает никаких возвращаемых значений, поэтому я не могу ничего сделать с выходом.
Ответы
Ответ 1
Вы можете использовать команду 'listDatabases'
admin для этого:
var db_list = db.adminCommand('listDatabases');
Возвращает объект, который выглядит так:
{
"databases" : [
{
"name" : "test",
"sizeOnDisk" : 2097152000,
"empty" : false
},
{
"name" : "local",
"sizeOnDisk" : 1,
"empty" : true
}
],
"totalSize" : 8487174144,
"ok" : 1
}
Ответ 2
Также есть getDBNames() (мне нравится, как ответ JohnnyHK получает размер.
d = db.getMongo().getDBNames()
[ "graylog2", "local", "admin", "test" ]
Тогда я могу:
for (var x in d) { db = new Mongo().getDB(d[x]); print(db); y = print(db.getCollectionNames()); }