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

Итерация по всей базе данных Mongo

Я относительно новичок в MongoDB, и я не смог найти решение для того, что я ищу.

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

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

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

4b9b3361

Ответ 1

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

// 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);
    });

});