Itérer sur tous les Mongo de la base de données
Je suis relativement nouveau à MongoDB et je n'ai pas été en mesure de trouver une solution pour ce que je cherche.
je voudrais itérer sur toutes les bases de données mongo et exécuter une commande sur chaque collection de chaque base de données. Je peux exécuter la commande suivante pour obtenir tous les noms de db:
db.runCommand( { listDatabases: 1 } ).databases.forEach(function (db) {
print ("db=" + db.name);
});
mais comment puis-je" changer " la base de données dans chaque boucle forEach pour que je puisse lancer requête contre chaque base de données? Je veux utiliser quelque chose comme use db.name
dans loop mais ce n'est pas de travail.
1 réponses
vous pouvez utiliser db.getSiblingDB()
pour passer d'une base de données à l'autre et db.getCollectionNames()
pour obtenir les noms des collections. Notez que vous devez exécuter la première commande à partir de la base de données admin
pour obtenir la liste des bases de données. Un script court dans le shell pour réaliser ce que vous voulez faire ressemblerait à quelque chose comme ceci:
// 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);
});
});