私はMongoDBに比較的慣れていないので、探しているものの解決策を見つけることができませんでした。
すべてのmongoデータベースを反復処理し、各データベースの各コレクションでコマンドを実行したいと思います。次のコマンドを実行して、すべてのデータベース名を取得できます。
db.runCommand( { listDatabases: 1 } ).databases.forEach(function (db) {
print ("db=" + db.name);
});
しかし、forEachループ内でデータベースを「切り替え」て、各データベースに対してクエリを実行するにはどうすればよいですか?ループ内でuse db.name
のようなものを使用したいのですが、機能しません。
db.getSiblingDB()
を使用してデータベースを切り替えたり、db.getCollectionNames()
を使用してコレクション名を取得したりできます。データベースのリストを取得するには、admin
データベースから最初のコマンドを実行する必要があることに注意してください。やりたいことを実現するためのシェルの短いスクリプトは、次のようになります。
// Switch to admin database and get list of databases.
db = db.getSiblingDB("admin");
dbs = db.runCommand({ "listDatabases": 1 }).databases;
// Iterate through each database and get its collections.
dbs.forEach(function(database) {
db = db.getSiblingDB(database.name);
cols = db.getCollectionNames();
// Iterate through each collection.
cols.forEach(function(col) {
// Do something with each collection.
print(col);
});
});