我的MongoDB实例有几个相同设计的数据库。我想遍历每个数据库并将唯一索引应用于每个数据库中的多个集合。
我理解如何将新的唯一索引应用于集合,但是如何遍历每个数据库并在每个数据库上运行命令?
db.collection.createIndex (
{ email : 1 },
{ unique : true, collation : { locale : "en", strength : 2 } }
)
答案 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。