2012-10-16 27 views
12

Chúng tôi có một hệ thống với nhiều cơ sở dữ liệu mongo khác nhau. Tôi thường xuyên muốn viết các truy vấn đặc biệt sẽ áp dụng cho tất cả (hoặc một tập hợp con) của chúng, mà không cần phải có kiến ​​thức trước về cơ sở dữ liệu nào.Hoạt động trên tất cả các cơ sở dữ liệu từ vỏ mongo

tôi có thể làm show dbs, mà trực quan sẽ in một danh sách, nhưng là có một cách để làm điều gì đó như:

var db_list = listDatabases(); 

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

Vấn đề của tôi với show dbs là nó không chụp bất kỳ giá trị trả lại, vì vậy tôi không thể làm bất cứ điều gì hiệu quả với đầu ra.

Trả lời

27

Bạn có thể sử dụng lệnh 'listDatabases' quản trị cho rằng:

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

Đó trả về một đối tượng mà trông như thế này:

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

Cụ thể hơn 'db_list = db.adminCommand (' listDatabases '). cho (var i trong db_list) {print (db_list [i] .name)} ':) – KCD

1

Ngoài ra còn có getDBNames() (i thích cách trả lời JohnnyHK của bị kích thước:

d = db.getMongo().getDBNames() 
[ "graylog2", "local", "admin", "test" ] 

Sau đó, tôi có thể:

for (var x in d) { db = new Mongo().getDB(d[x]); print(db); y = print(db.getCollectionNames()); } 
Các vấn đề liên quan