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

$set

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作

注意

曖昧さ回避

次のページでは更新演算子 $set を参照しています。集計ステージについては、$set」を参照してください。

$set

$set演算子は、フィールドの値を指定された値に置き換えます。

次の環境でホストされる配置には $set を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

$set演算子式の形式は次のとおりです。

{ $set: { <field1>: <value1>, ... } }

<field> を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。

MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。

フィールドが存在しない場合、 $setは新しいフィールドが型制約に違反していない限り、指定された値を持つ新しいフィールドを追加します。 存在しないフィールドにドット付きパスを指定すると、 $set必要に応じて埋め込みドキュメントを作成し、フィールドへのドット付きパスを実行します。

複数のフィールドと値のペアを指定すると、 $setは各フィールドを更新または作成します。

MongoDB 5.0 以降、$setなどの更新演算子を空のオペランド式({ })と併用しても、mongod でエラーが発生しなくなりました。空の更新を使用すると変更は一切されず、oplog エントリも作成されません(操作は実行されません)。

products コレクションを次のように作成します。

db.products.insertOne(
{
_id: 100,
quantity: 250,
instock: true,
reorder: false,
details: { model: "14QQ", make: "Clothes Corp" },
tags: [ "apparel", "clothing" ],
ratings: [ { by: "Customer007", rating: 4 } ]
}
)

次の操作では、 _id100に等しい条件に一致するドキュメントで、 $set演算子を使用して、 quantityフィールド、 detailsフィールド、およびtagsフィールドの値を更新します。

db.products.updateOne(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "2600", make: "Fashionaires" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)

この操作により、次の項目が更新されます。

  • quantity の値を500

  • details フィールド(新しい埋め込みドキュメントがあるもの)

  • tags フィールド(新しい配列があるもの)

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Fashionaires' },
tags: [ 'coats', 'outerwear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 4 } ]
}

<field> を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。

_id100 に等しい条件に一致するドキュメントで、次の操作を実行すると、details ドキュメントの make フィールドが更新されます。

db.products.updateOne(
{ _id: 100 },
{ $set: { "details.make": "Kustom Kidz" } }
)

更新後のドキュメントには次の値があります。

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Kustom Kidz' },
tags: [ 'coats', 'outerwear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 4 } ]
}

重要

上記のコードは dot notation を使用して、埋め込まれた details ドキュメントの make フィールドを更新します。コード形式は次のコード例に似ていますが、代わりに 埋め込まれたドキュメント全体を置き換え、埋め込まれた details ドキュメント内の他のすべてのフィールドを削除します。

db.products.updateOne(
{ _id: 100 },
{ $set: { details:
{make: "Kustom Kidz"}
}
})

<field> を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。

_id100 に等しい条件に一致するドキュメントで、次の操作を実行すると、tags フィールド内の2番目の要素(1 の配列インデックス)と、ratings 配列の最初の要素(0 の配列インデックス)内の rating フィールドが更新されます。

db.products.updateOne(
{ _id: 100 },
{ $set:
{
"tags.1": "rain gear",
"ratings.0.rating": 2
}
}
)

更新後のドキュメントには次の値があります。

{
_id: 100,
quantity: 500,
instock: true,
reorder: false,
details: { model: '2600', make: 'Kustom Kidz' },
tags: [ 'coats', 'rain gear', 'clothing' ],
ratings: [ { by: 'Customer007', rating: 2 } ]
}

配列のその他の更新演算子については、「配列更新演算子」を参照してください。

Tip

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

戻る

$rename