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.

12
demandé sur Juan Carlos Farah 2015-04-13 18:50:09

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);
    });

});
30
répondu Juan Carlos Farah 2015-04-13 17:19:11