Docs Menu
Docs Home
/ /

ピリオドとドル記号を含むフィールド名

フィールド名にドル記号($)またはピリオド(.)を使用しないでください。 MongoDB は、フィールド名にこれらの文字を使用するドキュメントを保存しますが、次の理由で非推奨にしています。

  • クエリ パフォーマンス。これらのフィールドではインデックスできないため、クエリの効率が低下する可能性があります。これらのフィールドが使用できる他の機能については、「 一般的な制限 」を参照してください。

  • クエリ可能性。これらのフィールドを直接クエリすることはできません。これらを読み取りまたは変更するには、$getField$setField$literal などのヘルパーメソッドが必要です。これらのヘルパーがない場合、 MongoDB はピリオドを含むフィールド名を埋め込みフィールドへのパスとして解釈します。

フィールド名の検証ルールは、すべてのタイプのストレージ操作で同じではありません。

ドル記号($)がプレフィックスとして付いたフィールド名や、ピリオド(.)を含むフィールド名の使用には一般的な制限があります。これらのフィールドには、次のことはできません。

  • インデックスを付ける

  • シャードキーの一部に使用する

  • を使用して検証される $jsonSchema

  • エスケープ シーケンスで変更する

  • フィールドレベル暗号化と併用する

  • _id ドキュメントのサブフィールドに使用する

  • フィールド名にピリオドで区切られた 255 単語を超える単語

  • $プレフィックスのみ)フィールド名がフィールド名と一致する場合は、ドキュメントのルートレベルで に依存します。 MongoDB は内部ドキュメントメタデータを予約します

MongoDB は、内部ドキュメントメタデータ用に $ プレフィックスがついたフィールド名のセットを予約します。データ内のルートレベルのフィールド名がこれらの予約名のいずれかと照合する場合、 MongoDB はフィールドを保持したりクエリに返したりせず、場合によっては結果からそのフィールドを削除します。これらの予約名は内部的なものであり、リリース間で変更される可能性があるため、ルートレベルの $ プレフィックスがついたフィールド名にデータを保存したり、それらを読み取れることを前提にしないでください。

警告

ドル記号($)とピリオド(.)によるデータ損失の可能性

ドル記号($)で始まるフィールド名や、ピリオド(.)を含むフィールド名を使用し、MongoDB 5.0 以前のサーバーで未確認の書き込み(書き込み確認(write concern)w=0)と組み合わせて使用すると、頻度は低いもののデータが失われる可能性があります。

insertupdate、およびfindAndModifyコマンドを実行すると、5.0 互換のドライバーは、ドル記号($)で始まるフィールド名またはピリオド( .)を含むフィールド名を持つドキュメントの使用に対する制限を解除します。これらのフィールド名は、以前のドライバー バージョンではクライアント側のエラーを引き起こしていました。

ドライバーが接続されているサーバー バージョンに関係なく、制限は解除されます。5.0 ドライバーが古いサーバーにドキュメントを送信すると、エラーを送信することなくドキュメントは拒否されます。

警告

ドル記号($)とピリオド(.)に関するインポートとエクスポートの問題

MongoDB 5.0 以降、ドキュメントフィールド名に接頭辞としてドル記号($)を付けたり、ピリオド(.)を含めたりすることができます。ただし、フィールド名にこれらの記号が使用されている場合、状況によっては mongoimportmongoexport が通常どおりに動作しないことがあります。

MongoDB Extended JSON v2では、型ラッパーと、型ラッパーと同じ名前を持つフィールドを区別できません。対応する BSON 表現にドル( $)で始まるキーが含まれる可能性があるコンテキストでは、拡張 JSON 形式を使用しないでください。DBRef メカニズムは、この一般ルールの例外です。

フィールド名にピリオド(.)が含まれる状態での mongoimportmongoexport の使用にも制限があります。CSV ファイルではデータ階層を表すのにピリオド(.)が使用されるため、フィールド名のピリオド(.)はネストのレベルと誤解されます。

ピリオドとドル記号を含むフィールド名を処理する方法の例については、次のページを参照してください。

戻る

分散されたクエリ

項目一覧