我们有一个包含许多不同mongo数据库的系统。我经常想要编写适用于它们的所有(或子集)的即席查询,而不必事先了解哪些数据库存在。
我可以show dbs
,它可以直观地打印一个列表,但是有办法做一些事情:
var db_list = listDatabases();
for (i = 0; i < db_list.length; i++) {
do_something(db_list[i])
}
我对show dbs
的问题是它没有捕获任何返回值,因此我无法对输出做任何有效的工作。
答案 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()); }