mongorestore命令替换现有记录?

时间:2014-12-27 11:46:55

标签: mongodb

有没有办法让mongorestore替换数据库中现有的记录而不是跳过它,这是默认行为?

我目前正在使用mongodb的最新2.4.x版本。

5 个答案:

答案 0 :(得分:47)

答案 1 :(得分:23)

没有。来自mongorestore

  

如果还原到现有数据库,mongorestore将仅插入现有数据库,并且不执行任何类型的更新。如果现有文档在目标数据库和集合中具有相同的值_id字段,则mongorestore不会覆盖这些文档。

如果要使用mongorestore完全覆盖数据库或数据库中的集合,请删除数据库或集合(按vikas的答案指出的--drop参数检查)。如果要替换某些文档或合并重复文档,则需要编写自己的脚本来执行还原并自行实现更复杂的逻辑。

答案 2 :(得分:7)

如果你有一个小集合,你可以随时:

  1. 在其他地方mongodump你的目标集合
  2. 删除目标馆藏
  3. mongorestore原始转储文件
  4. mongorestore您在步骤1中制作的转储文件
  5. 这会将优先级切换到转储文件,而不是数据库中的_ids。

答案 3 :(得分:3)

mongorestore --drop
  

在从转储备份恢复集合之前,请删除   目标数据库中的集合。 --drop不会删除集合   那些不在备份中。

Mongo official documentation

答案 4 :(得分:0)

我已经使用

解决了这个问题
  1. 还原集合并将输出写入文件(错误)
mongorestore --db database -c collection ~/path_to_bson > output.txt 2>&1
  1. 过滤掉包含- E11000 duplicate key error collection ...ObjectId(...)的行
  2. 然后使用多重编辑工具(在我的情况下为崇高)将这些行转换为 db.collection.remove({_id: ObjectId(...)})
  3. 再次还原数据库。