You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨服务器备份恢复MongoDB集合:是否覆盖已有数据?

MongoDB 6备份恢复:覆盖 vs 合并现有数据

默认恢复行为(无特殊参数)

如果目标服务器上已存在xyz数据库和abc集合:

  • 备份文档中**_id不重复**的记录会被插入到目标集合中
  • 备份文档中**_id与现有记录重复**的记录会触发插入错误(不会覆盖现有记录)
  • 目标集合的原有索引会被替换为备份文件中的索引

主动触发完全覆盖(使用--drop参数)

如果执行恢复命令时添加--drop选项:

mongorestore --db xyz --collection abc /path/to/backup/files --drop
  • 会先删除目标服务器上的abc集合(包括所有文档、索引)
  • 再基于备份文件完全重建该集合
  • 这种场景下,目标集合的原有数据会被彻底覆盖

实现数据合并的注意事项

如果想要保留现有数据并合并备份数据:

  • 必须确保备份文档的_id与目标集合现有文档无重复(避免插入报错)
  • 不要使用--drop参数
  • 若需保留目标集合的原有索引,需添加--noIndexRestore参数(否则备份中的索引会替换原有索引),示例命令:
mongorestore --db xyz --collection abc /path/to/backup/files --noIndexRestore
  • 若备份中存在_id重复的文档,要么提前清理备份内的重复项,要么通过--writeConcern {w:0}忽略错误(不推荐,易引发数据不一致)

核心结论

  • 默认恢复:不删除现有数据,仅插入新文档(_id重复会报错),但会替换索引
  • 加--drop恢复:完全删除原有集合后重建,彻底覆盖所有数据
  • 合并数据:需保证_id无冲突,配合--noIndexRestore可保留原有索引

内容的提问来源于stack exchange,提问作者Vijay Muddu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:05:16