MongoDB-在重复密钥上..更新行为
我已经检查了许多类似的回答,我觉得没有什么能清楚地回答这个问题,或者答案不正确 问题:MongoDB-在重复密钥上..更新行为,mongodb,mongoose,nosql,Mongodb,Mongoose,Nosql,我已经检查了许多类似的回答,我觉得没有什么能清楚地回答这个问题,或者答案不正确 问题: db.todos.insert({_id:1, name:'Test1'}) db.todos.insert({_id:2, name:'Test2'}) 以上2个文件未经发布而添加。现在,我尝试使用update withupsert,如果发现重复的密钥,则假定插入 db.todos.update({name:'Test3'},{_id:2, name:'Test4'},{upsert:true}) 但这
db.todos.insert({_id:1, name:'Test1'})
db.todos.insert({_id:2, name:'Test2'})
以上2个文件未经发布而添加。现在,我尝试使用update withupsert,如果发现重复的密钥,则假定插入
db.todos.update({name:'Test3'},{_id:2, name:'Test4'},{upsert:true})
但这会产生以下错误:
11000 duplicate key error index: todos.todos.$_id_ dup key: { : 2.0 }
我的问题是,有没有一种方法可以实现DPULICATE KEY..UPDATE behavior ON MongoDB?将
{id:2,name:'Test4'}
更改为{name:'Test4'}
无需分配您的_id,MongoDB将为您生成唯一的id。我知道可能有一些用例需要创建自定义id;但是,我认为应该谨慎地这样做。你能用简单的话解释一下你到底想要实现什么,即“如果存在一个符合条件a和B的文档,那么就这样做,否则就那样做?”我认为你的问题有答案,但是带有Test3和Test4值的update语句完全令人恼火,请编辑问题:“Test3”->“Test2”,因为您遇到的错误是在第二次执行update语句之后发生的,这确实没有反映在问题文本中:)您还没有理解我的观点。。1我想在重复密钥更新**行为02上实现**。我认为插入是不可能的(如果我错了,请纠正我)03。我故意放“Test3”,因为如果我放“Test2”,它将匹配现有记录并进行更新。但Mongo文档所说的是,如果它没有找到匹配的记录,它将尝试插入,因为我正在发送'upert:true',如果要这样做,为什么不将_id放入条件中呢?如果插入会产生重复的eky更新,则仍会将其写入。我想尝试,重复密钥..因此删除_id不是此处的选项OK,那么这是不可能的。您需要在应用程序级别处理这个问题。