Mongodb更新。不允许在_id上使用setOnInsert

时间:2013-04-25 14:21:46

标签: mongodb

我理解您无法在现有的mongodb文档上更新_id。

但是有没有理由我们不能在'setOnInsert'部分的upsert中使用它?因为它是'插入'所以它不是更新。

我的预期用法是:

db.myCol.update({_id:12345},{$setOnInsert:{_id:12345},$set:{myValue:'hi'}});

这是一个错误还是我错过了什么?

2 个答案:

答案 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”字段。