迭代所有Mongo数据库

时间:2015-04-13 15:50:09

标签: mongodb mongodb-query mongo-shell

我对MongoDB相对较新,而且我找不到我正在寻找的解决方案。

我想迭代所有mongo数据库并在每个数据库的每个集合上运行一些命令。我可以运行以下命令来获取所有数据库名称:

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

但我如何"切换" forEach循环中的数据库,所以我可以对每个数据库运行查询?我希望在循环中使用类似use db.name的内容,但这不起作用。

1 个答案:

答案 0 :(得分:34)

您可以使用db.getSiblingDB()在数据库和db.getCollectionNames()之间切换以获取集合名称。请注意,您必须运行admin数据库中的第一个命令才能获取数据库列表。 shell中用于实现您想要执行的操作的简短脚本如下所示:

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

});