Mongorestore如果没有--drop已经存在则更新记录

Sha*_*try 7 database-backups mongodb

我有大量的数据收集,我必须每周末转移到另一台机器.所以我计划进行增量备份和恢复.经过实验,如果_id已经存在,mongorestore永远不会合并数据.基于上述问题,我尝试使用mongoimport并导出但存在同样的问题,因为现有记录未合并.任何可能的解决方案都会有所帮助.

由:: 11000引起的mongoimport命令错误E11000重复键错误索引:news.news_data.$ id dup key:{:ObjectId('5404410d9f5323ef734dac68')}

Kum*_*ash 13

第一种情况是真的.Mongorestore如果已存在则不更新文档.它在恢复时会贬低那些文件.在第二种情况下,请尝试使用带有--upsert选项的mongoimport.如果_id已经存在,它将合并记录.

例如:

mongoimport --db dbname --collection collname --upsert --file file.json
Run Code Online (Sandbox Code Playgroud)

  • @wdberkeley:选择 [upsert](https://jira.mongodb.org/browse/TOOLS-121) 而非 drop + restore 的一些潜在原因:大型集合中只有少数文档更新;不想浪费时间重新创建索引;仅发出 changeStreams 的必要更改。 (2认同)

小智 6

请投票支持此票以添加upsertmongorestore 选项

在实施之前,我们找到了解决方法:

  1. 来自服务器 A 的转储集合(原始)
  2. 来自服务器 B 的转储集合(目标)
  3. 使用服务器 B 上的删除集合 A 进行恢复 4
  4. 在服务器 B 上进行恢复而不删除集合 B

在这种情况下,更新的文档不会被覆盖