我对MongoDB相对较新,而且我找不到我正在寻找的解决方案。
我想迭代所有mongo数据库并在每个数据库的每个集合上运行一些命令。我可以运行以下命令来获取所有数据库名称:
db.runCommand( { listDatabases: 1 } ).databases.forEach(function (db) {
print ("db=" + db.name);
});
但我如何"切换" forEach循环中的数据库,所以我可以对每个数据库运行查询?我希望在循环中使用类似use db.name
的内容,但这不起作用。
答案 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);
});
});