$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 } ] } )
最上位フィールドの設定
次の操作では、 _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 } ] }
配列のその他の更新演算子については、「配列更新演算子」を参照してください。