5

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

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

我的预期用法是这样的:

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

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

4

2 回答 2

11

MongoDB 将 upsert 查询的“查询”部分用作集合的一部分,这意味着您不必在要指定自己的 _id 的集合部分中指定 _id。

注意:我上面的查询也有一个小错误,即缺少 upsert 标志。

这是正确的查询:

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

如果记录不存在,则此查询将插入如下所示的记录:

{_id:12345,myValue:'hi'}
于 2013-04-26T06:57:59.247 回答
4

真的,这是在开发版本 2.5.4 或版本 2.6.0 中修复的 mongo 中的错误:

https://jira.mongodb.org/browse/SERVER-9958

一旦解决了这个问题,我相信这应该可以正常工作。在一般情况下,更新查询不一定指定“_id”字段。

于 2014-02-18T20:27:15.480 回答