$setOnInsert
定義
$setOnInsert
upsert: true を使用したアップデート操作の結果、ドキュメントが挿入された場合、
$setOnInsert
は指定された値をドキュメント内のフィールドに割り当てます。アップデート操作の結果が挿入にならない場合、$setOnInsert
は何も行いません。次の
upsert
オプションを指定できます。db.collection.updateOne( <query>, { $setOnInsert: { <field1>: <value1>, ... } }, { upsert: true } ) <field>
を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。
動作
MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。
MongoDB 5.0 以降、$setOnInsert
などの更新演算子を空のオペランド式({ }
)と併用しても、mongod
でエラーが発生しなくなりました。空の更新を使用すると変更は一切されず、oplog エントリも作成されません(操作は実行されません)。
例
products
コレクションにはドキュメントが含まれていません。
db.collection.updateOne()
upsert: true パラメーターを使用して新しいドキュメントを挿入します。
db.products.updateOne( { _id: 1 }, { $set: { item: "apple" }, $setOnInsert: { defaultQty: 100 } }, { upsert: true } )
MongoDB は<query>
を使用して_id: 1
の新しいドキュメントを作成します。 $setOnInsert
は指定されたようにドキュメントを更新します。
products
コレクションには新しく挿入されたドキュメントが含まれています:
{ "_id" : 1, "item" : "apple", "defaultQty" : 100 }
upsert パラメーターがtrue
db.collection.updateOne()
の場合:
が新しいドキュメントを作成します
が
$set
操作を適用しますは
$setOnInsert
操作を適用します
db.collection.updateOne()
が既存のドキュメントと一致する場合、MongoDB は$set
操作のみを適用します。