我理解您无法在现有的mongodb文档上更新_id。
但是有没有理由我们不能在'setOnInsert'部分的upsert中使用它?因为它是'插入'所以它不是更新。
我的预期用法是:
db.myCol.update({_id:12345},{$setOnInsert:{_id:12345},$set:{myValue:'hi'}});
这是一个错误还是我错过了什么?
答案 0 :(得分:9)
MongoDB使用'查询'作为集合的一部分的upsert查询的一部分,这意味着您不必在要设置自己的_id的集合部分中指定_id。
注意:我上面的查询也有一个小错误,它是缺少的upsert标志。
这是正确的查询:
db.myCol.update({_id:12345},{$set:{myValue:'hi'}},{upsert:true});
如果记录不存在,此查询将插入一条如下所示的记录:
{_id:12345,myValue:'hi'}
答案 1 :(得分:3)
真的,这是在开发版本2.5.4或版本2.6.0中修复的mongo中的错误:
https://jira.mongodb.org/browse/SERVER-9958
一旦修复,我相信这应该按照需要运作。在一般情况下,更新查询不一定指定“_id”字段。