MongoDB - ON DUPLICATE KEY ..UPDATE行为

时间:2014-02-12 13:09:21

标签: mongodb mongoose nosql

我已经检查了很多类似的回答,我觉得这个问题没有什么可以解答清楚,或者回答不正确。

问题:

db.todos.insert({_id:1, name:'Test1'})
db.todos.insert({_id:2, name:'Test2'})

以上2个文件添加没有问题。现在我正在尝试使用带有 upsert 的更新,如果找到重复的密钥则会插入。

db.todos.update({name:'Test3'},{_id:2, name:'Test4'},{upsert:true})

但这会产生以下错误:

11000 duplicate key error index: todos.todos.$_id_  dup key: { : 2.0 }

我的问题是,有没有办法在MongoDB上实现ON DPULICATE KEY ... UPDATE行为?

2 个答案:

答案 0 :(得分:0)

{_id:2, name:'Test4'}更改为{name:'Test4'}

无需分配您的_id,MongoDB将为您生成唯一的ID。我知道可能有一些用例需要创建自定义_id;但是,我认为应该谨慎地做。

答案 1 :(得分:0)

db.todos.update({name:'Test3'},{_id:2, name:'Test4'},{upsert:true})

表示查找名称为 Test3 的文档,如果没有这样的文档,则创建一个带有 _id:2,name:'Test4' 的文档。

由于没有这样的行,它会尝试插入与现有 _id:2 冲突的 {_id:2,name:'Test4'}。