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