MongoDB执行mongorestore恢复备份时出现E11000 _id_重复键错误如何解决
错误根因
你遇到的E11000重复键报错核心原因是mongorestore参数优先级冲突:
- 你在恢复命令的URI末尾指定了
/DATABASE_NAME,该参数的优先级高于--nsFrom/--nsTo的命名空间映射规则,导致恢复操作没有写入你预期的DATABASE_NAME_COPY库,反而直接尝试写入已有数据的原库DATABASE_NAME,相同_id的文档触发唯一键约束报错。 - 报错日志里的
restoring to existing collection DATABASE_NAME.admins without dropping也已经明确验证了这一点:恢复操作的目标集合是原库的admins,而非目标拷贝库的集合。
解决方案
你可以选择以下任意一种修正后的恢复命令执行即可:
方案1:使用命名空间映射(和你原本的用法逻辑一致)
移除URI末尾的原库名,让--nsFrom/--nsTo规则生效:
mongorestore --uri 'mongodb+srv://ACCOUNT_NAME:PASSWORD@cluster0.fklgt.mongodb.net' --archive="DATABASE_DUMP" --nsFrom='DATABASE_NAME.*' --nsTo='DATABASE_NAME_COPY.*'
方案2:直接指定目标库(更简洁)
不需要命名空间映射参数,直接在URI里指定目标拷贝库,同时指定要导入的原库集合:
mongorestore --uri 'mongodb+srv://ACCOUNT_NAME:PASSWORD@cluster0.fklgt.mongodb.net/DATABASE_NAME_COPY' --archive="DATABASE_DUMP" --nsInclude='DATABASE_NAME.*'
可选补充
如果目标DATABASE_NAME_COPY库已经存在残留数据,你可以在上述命令末尾添加--drop参数,恢复前会先删除目标库对应的集合,避免其他数据冲突。
内容的提问来源于stack exchange,提问作者AG_HIHI
相关产品推荐
相关产品推荐

