从Mongo shell操作所有数据库

12
我们有一个包含许多不同Mongo数据库的系统。我经常需要编写自适应查询,这些查询将应用于所有(或一部分)数据库,而无需预先知道哪些数据库存在。
我可以使用show dbs命令来列出所有数据库,但是否有一种方法可以执行以下操作:
var db_list = listDatabases();

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

我对show dbs的问题在于它无法捕获任何返回值,因此我无法对输出做出任何有意义的处理。

2个回答

27

您可以使用'listDatabases'管理命令来实现:

var db_list = db.adminCommand('listDatabases');

这会返回一个看起来像这样的对象:

{
    "databases" : [
        {
            "name" : "test",
            "sizeOnDisk" : 2097152000,
            "empty" : false
        },
        {
            "name" : "local",
            "sizeOnDisk" : 1,
            "empty" : true
        }
    ],
    "totalSize" : 8487174144,
    "ok" : 1
}

更具体地说,db_list = db.adminCommand('listDatabases').databases; for(var i in db_list) { print(db_list[i].name) } :) - KCD

1

还有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()); }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接