Linux VM运行MongoDB执行mongoimport报E11000重复键错误
MongoDB 导入异常排查解决指南
端口参数问题说明
课程指引默认基于MongoDB默认监听端口27017编写,你当前Linux VM中的MongoDB服务修改了默认监听配置,实际运行在35524端口,因此不指定--port 35524参数时,mongoimport会默认尝试连接27017端口,自然无法正常执行,导入时加该参数是符合你当前环境配置的正确操作,无需和指引强求一致。
E11000 duplicate key error 报错解决
该错误本质是待导入数据中存在和目标集合inspections已有唯一索引(包含默认_id主键)值重复的条目,按以下场景排查处理即可:
- 场景1:之前已执行过同一条导入命令
部分数据已经成功写入集合,重复执行时相同主键的文档会触发冲突。直接在导入命令中加--drop参数,导入前自动清空目标集合的旧数据即可,完整命令如下:mongoimport --port 35524 --db city --collection inspections --drop ./city_inspections.json - 场景2:首次导入就触发报错,提前排查集合索引
先通过mongo shell连接到35524端口的MongoDB实例,依次执行以下命令检查集合索引:
如果返回结果中除了默认的// 切换到city库 use city // 查看inspections集合的所有索引 db.inspections.getIndexes()_id索引外,还存在其他带unique: true属性的自定义唯一索引,先确认该索引是否是业务必需:如果是误创建的冗余索引,执行db.inspections.dropIndex("对应索引名称")删除后重新导入即可。 - 场景3:源数据文件本身存在重复条目
先检查city_inspections.json文件内部是否存在重复的_id或其他唯一索引字段值,如果不想手动清理源文件,可以在导入命令中加--upsert参数,遇到重复条目时自动转为更新操作,不会触发键冲突中断导入,命令如下:mongoimport --port 35524 --db city --collection inspections --upsert ./city_inspections.json
内容的提问来源于stack exchange,提问作者65454
相关产品推荐
相关产品推荐

