Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用命令行删除MongoDB数据库中所有集合的所有索引_Mongodb_Indexing_Mongodump_Mongorestore - Fatal编程技术网

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

使用命令行删除MongoDB数据库中所有集合的所有索引,mongodb,indexing,mongodump,mongorestore,Mongodb,Indexing,Mongodump,Mongorestore,我使用mongorestore恢复数据库,但在尝试运行应用程序时,发现一个错误,即索引已经存在 我知道函数db.collection.dropIndex(),但有没有一种方法可以自动执行此操作并同时从数据库中的所有集合中删除所有索引 我试过了 db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });

我使用mongorestore恢复数据库,但在尝试运行应用程序时,发现一个错误,即索引已经存在

我知道函数db.collection.dropIndex(),但有没有一种方法可以自动执行此操作并同时从数据库中的所有集合中删除所有索引

我试过了

db.getCollectionNames().forEach(function(col_name) {   
   var coll = db.getCollection(col_name);   
   coll.dropIndexes(); 
});
但这并不能解决问题。 有什么想法吗?

您的命令对我有效(它会删除当前选定数据库上的所有索引)。但你也可以使用这个替代方案

db.getCollectionNames().forEach(function(collName) { 
    db.runCommand({dropIndexes: collName, index: "*"});
});
删除索引时,只会删除非
\u id
索引

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

从曼蒙哥雷斯托尔的
开始

--noIndexRestore

版本2.2中的新功能

阻止MongoStore按照相应mongodump输出中的指定恢复和构建索引


可以使用此命令删除所有集合中的所有索引:

db.getCollectionNames().forEach(function (d) {
   db[d].dropIndexes();
});
试试这个


然后使用db.dropDatabase;命令,如果您想从新数据库开始。。。!!!有时我会回来阅读@RubyOnRails上面的评论,以确保我从未向我的初级开发人员发表过这样的评论。如果您使用的是Spring,您可以尝试升级MongoDB驱动程序。我认为较新的驱动程序解决了这个问题,但我并不乐观,因为我使用了下面的解决方案来销毁和重新创建我的所有索引。如果我有更多的时间,而不是像“哦,不!生产停止了!”那样,我会首先尝试在一个受控的测试环境中升级我的MongoDB驱动程序。