12

我们有一个包含许多不同 mongo 数据库的系统。我经常想编写适用于所有(或一部分)它们的临时查询,而无需先验知道那里有哪些数据库。

我可以show dbs,这将在视觉上打印一个列表,但有没有办法做类似的事情:

var db_list = listDatabases();

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

我的问题show dbs是它没有捕获任何返回值,所以我不能对输出做任何有成效的事情。

4

2 回答 2

27

您可以'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
}
于 2012-10-16T14:14:07.873 回答
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()); }
于 2015-10-01T13:32:36.677 回答