MongoDB - 遍历每个数据库并运行命令

时间:2017-03-24 10:20:12

标签: mongodb

我的MongoDB实例有几个相同设计的数据库。我想遍历每个数据库并将唯一索引应用于每个数据库中的多个集合。

我理解如何将新的唯一索引应用于集合,但是如何遍历每个数据库并在每个数据库上运行命令?

db.collection.createIndex (
    { email : 1 },
    { unique : true, collation : { locale : "en", strength : 2 } }
)

1 个答案:

答案 0 :(得分:2)

一般的想法是遍历从命令返回的列表

db.adminCommand('listDatabases')

<强> db.getMongo().getDBNames()

在循环中,使用 getDB() 方法创建db对象,并使用 db.getCollectionNames() 循环遍历每个db的集合,获取集合对象 db.getCollection() db[collectionName] 括号语法并创建索引,如下所示:

mongo = db.getMongo(); // or mongo = new Mongo();
mongo.getDBNames().forEach(function(dbname){
    db = mongo.getDB(dbname);
    db.getCollectionNames().forEach(function(collectionName) {
        collection = db.getCollection(collectionName); // or db[collectionMame]
        indexes = collection.getIndexes();
        print("Indexes for " + collectionName + ":");
        printjson(indexes);

        emailIdx = indexes.filter(function(idx){ return idx.key === { "email": 1 }; });
        if (emailIdx.length < 1) {
            collection.createIndex (
                { email : 1 },
                { unique : true, collation : { locale : "en", strength : 2 } }
            )
        }
    });
})

可以找到有用的Mongo shell备忘单here

相关问题