Docs Menu
Docs Home
/
MongoDB マニュアル
/ / / /

$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 操作のみを適用します。

Tip

以下も参照してください。

戻る

$set

項目一覧