我已经检查了很多类似的回答,我觉得这个问题没有什么可以解答清楚,或者回答不正确。
问题:
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行为?
答案 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'}。