5

既存の mongodb ドキュメントで _id を更新できないという事実を理解しています。

しかし、「setOnInsert」部分のアップサートで使用できない理由はありますか? 「挿入時」であるため、更新ではありません。

私の予想される使用法は次のとおりです。

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

これはバグですか、それとも何か不足していますか?

4

2 に答える 2

11

MongoDB は、アップサート クエリの「クエリ」部分をセットの一部として使用します。つまり、独自の _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 に答える