定義
- $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 } ]    } ) 
最上位フィールドの設定
次の操作では、 _idが100に等しい条件に一致するドキュメントで、 $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> を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。
_id が 100 に等しい条件に一致するドキュメントで、次の操作を実行すると、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> を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。
_id が 100 に等しい条件に一致するドキュメントで、次の操作を実行すると、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 } ] } 
配列のその他の更新演算子については、「配列更新演算子」を参照してください。