ピリオドを含むフィールド名
このセクションでは、フィールド名にピリオドが含まれるドキュメントを挿入、クエリ、更新する方法をまとめます。
ピリオドを含むフィールド名を挿入
ピリオドのあるフィールド名を含むドキュメントを挿入するには、フィールド名を引用符で囲みます。
次のコマンドは、フィールド名 price.usd
を含むドキュメントを挿入します。
db.inventory.insertOne( { "item" : "sweatshirt", "price.usd": 45.99, "quantity": 20 } )
ピリオドのあるフィールドのクエリ
期間内のフィールドをクエリするには、 $getField
演算子を使用します。
次のクエリは、 price.usd
フィールドが40
より大きいドキュメントを返します。
db.inventory.find( { $expr: { $gt: [ { $getField: "price.usd" }, 40 ] } } )
[ { _id: ObjectId("66145f9bcb1d4abffd2f1b50"), item: 'sweatshirt', 'price.usd': 45.99, quantity: 20 } ]
$getField
を使用しない場合、MongoDB はピリオドを含むフィールド名を埋め込みオブジェクトとして扱います。 たとえば、次のクエリは、 price
フィールド内のusd
フィールドが40
より大きいドキュメントに一致します。
db.inventory.find( { "price.usd": { $gt: 40 } } )
上記のクエリは、次のドキュメントと一致します。
{ "item" : "sweatshirt", "price": { "usd": 45.99 }, "quantity": 20 }
期間内のフィールドを更新
期間を持つフィールドを更新するには、 $setField
演算子を使用した集計パイプラインを使用します。
次の操作は、 price.usd
フィールドを29.99
に設定します。
db.inventory.updateOne( { "item": "sweatshirt" }, [ { $replaceWith: { $setField: { field: "price.usd", input: "$$ROOT", value: 29.99 } } } ] )
$setField
を使用しない場合、MongoDB はピリオドを含むフィールド名を埋め込みオブジェクトとして扱います。 たとえば、次の操作では、既存のprice.usd
フィールドは更新されず、代わりにprice
フィールド内に埋め込まれた新しいフィールドusd
が挿入されます。
db.inventory.updateOne( { "item": "sweatshirt" }, { $set: { "price.usd": 29.99 } } )
結果ドキュメント:
[ { _id: ObjectId("66145f9bcb1d4abffd2f1b50"), item: 'sweatshirt', 'price.usd': 45.99 quantity: 20, price: { usd: 29.99 } } ]
集計パイプラインによる更新のその他の例については、「 集約パイプラインによる更新 」を参照してください。