Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-在重复密钥上..更新行为_Mongodb_Mongoose_Nosql - Fatal编程技术网

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,那么这是不可能的。您需要在应用程序级别处理这个问题。