このセクションでは、フィールド名にピリオドが含まれるドキュメントを挿入、クエリ、更新する方法をまとめます。MongoDB、ピリオドを含むフィールド名は使用できません。これらのフィールドでは一部の機能がサポートされていないためです。詳細については、「 一般的な制限 」を参照してください。
注意
フィールド名内のピリオドで区切られた単語数を 255 未満に制限します。さらに使用しようとすると、 MongoDB はエラーを返します。
ピリオドを含むフィールド名を挿入
ピリオドのあるフィールド名を含むドキュメントを挿入するには、フィールド名を引用符で囲みます。
次のコマンドは、フィールド名 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 }    } ] 
集計パイプラインによる更新のその他の例については、「 集約パイプラインによる更新 」を参照してください。
あいまいなフィールド名を回避
埋め込みフィールドのドット表記と同じ名フィールド名は使用しないでください。埋め込みフィールド { "a" : { "b": ... } } を持つドキュメントがある場合、そのコレクション内の他のドキュメントはトップレベルフィールド "a.b" を保持してはいけません。
埋め込みフィールドと最上位フィールドを同じ方法で参照できる場合、インデックス作成とシャーディング操作は埋め込みフィールドの で行われます。同じ方法で参照埋め込みフィールドがコレクションにある間は、最上位フィールド"a.b" のインデックスやシャードはできません。
例、コレクションに埋め込みフィールド{ "a" : { "b": ... } } と最上位フィールド"a.b" の両方を持つドキュメントが含まれている場合、インデックス作成とシャーディング操作は埋め込みフィールドの で実行されます。コレクションに埋め込みフィールド{ "a" : { "b": ... } } も含まれている場合、最上位フィールド"a.b" のインデックスまたはシャードは実行できません。