【发布时间】:2014-03-10 20:01:31
【问题描述】:
我已经查了很多类似的回答,我觉得没有什么能清楚地回答这个问题或者答案是不正确的。
问题:
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 行为?
【问题讨论】:
-
你能用简单的话解释一下你想要实现的目标吗,即“如果存在符合条件 A 和 B 的文档,则执行此操作,否则执行此操作?”我认为您的问题有答案,但是带有 Test3 和 Test4 值的更新语句完全令人恼火
-
OP,请编辑问题:'Test3' -> 'Test2',因为您遇到的错误是在执行更新语句后第二次,确实不是反映在问题文本中:)
-
你还没有理解我的意思.. 01. 我想实现 ** ON DUPLICATE KEY UPDATE ** 行为 02. 使用 Insert 我认为这是不可能的(如果我错了请纠正我) 03. 我故意放了'Test3',因为如果我放了'Test2',它将匹配现有记录并进行更新。但是 Mongo 文档说的是,如果找不到匹配的记录,它将尝试插入,因为我正在发送 'upsert:true'
-
如果你想这样做,为什么不把 _id 放到条件中呢?如果插入会进行重复的 eky 更新,它仍然会被写出