我已经使用mongorestore来恢复数据库,但是当我尝试运行我的应用程序时,我收到的错误是索引已经存在。
我知道函数db.collection.dropIndex()但是有没有办法自动执行此操作并立即从数据库中的所有集合中删除所有索引?
我试过
db.getCollectionNames().forEach(function(col_name) {
var coll = db.getCollection(col_name);
coll.dropIndexes();
});
但这并不能解决问题。 有什么想法吗?
答案 0 :(得分:24)
您的命令适用于我(它会删除当前所选数据库上的所有索引)。但你也可以使用这种替代方案。
db.getCollectionNames().forEach(function(collName) {
db.runCommand({dropIndexes: collName, index: "*"});
});
删除索引时,只会删除非_id
索引。
解决方法解决方案是在使用--noIndexRestore
进行还原时删除数据库并设置mongorestore
标志,以便不还原索引。
来自man mongorestore
:
- noIndexRestore
2.2版中的新功能。
阻止mongorestore恢复和构建相应mongodump输出中指定的索引。
答案 1 :(得分:1)
您可以使用此命令删除所有集合中的所有索引:
db.getCollectionNames().forEach(function (d) {
db[d].dropIndexes();
});
试试这个!