使用命令行删除MongoDB数据库中所有集合的所有索引

Sim*_*mon 14 indexing mongodb mongorestore mongodump

我已经使用mongorestore来恢复数据库,但是当我尝试运行我的应用程序时,我收到的错误是索引已经存在.

我知道函数db.collection.dropIndex()但是有没有办法自动执行此操作并立即从数据库中的所有集合中删除所有索引?

我试过了

db.getCollectionNames().forEach(function(col_name) {   
   var coll = db.getCollection(col_name);   
   coll.dropIndexes(); 
});
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题.有任何想法吗?

Chr*_*n P 24

您的命令适用于我(它删除当前所选数据库上的所有索引).但您也可以使用此替代方案.

db.getCollectionNames().forEach(function(collName) { 
    db.runCommand({dropIndexes: collName, index: "*"});
});
Run Code Online (Sandbox Code Playgroud)

删除索引时,只会删除非_id索引.

解决方法解决方案是删除数据库并--noIndexRestore在还原时设置标志,mongorestore以便不还原索引.

来自man mongorestore:

--noIndexRestore

2.2版中的新功能.

阻止mongorestore恢复和构建相应mongodump输出中指定的索引.