从mongo shell操作所有数据库

时间:2012-10-16 13:48:57

标签: mongodb

我们有一个包含许多不同mongo数据库的系统。我经常想要编写适用于它们的所有(或子集)的即席查询,而不必事先了解哪些数据库存在。

我可以show dbs,它可以直观地打印一个列表,但是有办法做一些事情:

var db_list = listDatabases();

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

我对show dbs的问题是它没有捕获任何返回值,因此我无法对输出做任何有效的工作。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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()); }