Подтвердить что ты не робот

Работайте со всеми базами данных из оболочки монго

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

Я могу сделать show dbs, который будет визуально распечатывать список, но есть ли способ сделать что-то вроде:

var db_list = listDatabases();

for (i = 0; i < db_list.length; i++) {
     do_something(db_list[i])
}

Моя проблема с show dbs заключается в том, что она не отображает никаких возвращаемых значений, поэтому я не могу ничего сделать с выходом.

4b9b3361

Ответ 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()); }