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

我知道函数db.收集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: "*"});
});

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

解决方案是在使用mongorestore进行恢复时删除数据库并设置--noIndexRestore标志,这样就不会恢复索引.

man mongorestore开始:

--noIndexRestore

在2.2版中新增.

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

Mongodb相关问答推荐

MongoDB v4.4聚合的$getfield替代方案

管道聚合mongodb同一$project阶段的计算字段?

有没有办法从另一条记录中插入一条记录

在数据中只有月份和年份的 mongodb 中字符串的日期时间

在一个变量上运行的 Node JS 中使用正则表达式的 Mongo 查询

使用 MongoDB C# 驱动程序在嵌套数组上使用过滤器生成器进行查询

在 Ubuntu 14.04 中安装 MongoDB 失败

Mongo DB中的Upserting和Id问题

从 LinkedHashMap 转换为 Json 字符串

MongoDB聚合排序不起作用

MongoDB - 投影一个并不总是存在的字段

如何在mongoose中加入两个集合

Golang + MongoDB 嵌入类型(将一个 struct 嵌入到另一个 struct 中)

MongoDB - 我如何找到另一个集合中的文档未引用的所有文档

如何使用 mgo 和 Go 查询 MongoDB 的日期范围?

Python Django-REST-framework 和 Angularjs 的文件夹 struct

获取 mongodb 中所有唯一标签的列表

Mongoose:查询starts with

RoboMongo:不显示所有文档

在 NodeJs 中处理 Mongodb 全局连接的最佳方法是什么