フィールド名にドル記号($)またはピリオド(.)を使用しないでください。 MongoDB は、フィールド名にこれらの文字を使用するドキュメントを保存しますが、次の理由で非推奨にしています。
クエリ パフォーマンス。これらのフィールドではインデックスできないため、クエリの効率が低下する可能性があります。これらのフィールドが使用できる他の機能については、「 一般的な制限 」を参照してください。
クエリ可能性。これらのフィールドを直接クエリすることはできません。これらを読み取りまたは変更するには、
$getField、$setField、$literalなどのヘルパーメソッドが必要です。これらのヘルパーがない場合、 MongoDB はピリオドを含むフィールド名を埋め込みフィールドへのパスとして解釈します。
フィールド名の検証ルールは、すべてのタイプのストレージ操作で同じではありません。
一般的な制限
ドル記号($)がプレフィックスとして付いたフィールド名や、ピリオド(.)を含むフィールド名の使用には一般的な制限があります。これらのフィールドには、次のことはできません。
インデックスを付ける
シャードキーの一部に使用する
を使用して検証される
$jsonSchemaエスケープ シーケンスで変更する
フィールドレベル暗号化と併用する
_idドキュメントのサブフィールドに使用するフィールド名にピリオドで区切られた 255 単語を超える単語
(
$プレフィックスのみ)フィールド名がフィールド名と一致する場合は、ドキュメントのルートレベルで に依存します。 MongoDB は内部ドキュメントメタデータを予約します
MongoDB は、内部ドキュメントメタデータ用に $ プレフィックスがついたフィールド名のセットを予約します。データ内のルートレベルのフィールド名がこれらの予約名のいずれかと照合する場合、 MongoDB はフィールドを保持したりクエリに返したりせず、場合によっては結果からそのフィールドを削除します。これらの予約名は内部的なものであり、リリース間で変更される可能性があるため、ルートレベルの $ プレフィックスがついたフィールド名にデータを保存したり、それらを読み取れることを前提にしないでください。
警告
ドル記号($)とピリオド(.)によるデータ損失の可能性
ドル記号($)で始まるフィールド名や、ピリオド(.)を含むフィールド名を使用し、MongoDB 5.0 以前のサーバーで未確認の書き込み(書き込み確認(write concern)w=0)と組み合わせて使用すると、頻度は低いもののデータが失われる可能性があります。
insert、update、およびfindAndModifyコマンドを実行すると、5.0 互換のドライバーは、ドル記号($)で始まるフィールド名またはピリオド( .)を含むフィールド名を持つドキュメントの使用に対する制限を解除します。これらのフィールド名は、以前のドライバー バージョンではクライアント側のエラーを引き起こしていました。
ドライバーが接続されているサーバー バージョンに関係なく、制限は解除されます。5.0 ドライバーが古いサーバーにドキュメントを送信すると、エラーを送信することなくドキュメントは拒否されます。
警告
ドル記号($)とピリオド(.)に関するインポートとエクスポートの問題
MongoDB 5.0 以降、ドキュメントフィールド名に接頭辞としてドル記号($)を付けたり、ピリオド(.)を含めたりすることができます。ただし、フィールド名にこれらの記号が使用されている場合、状況によっては mongoimport と mongoexport が通常どおりに動作しないことがあります。
MongoDB Extended JSON v2では、型ラッパーと、型ラッパーと同じ名前を持つフィールドを区別できません。対応する BSON 表現にドル( $)で始まるキーが含まれる可能性があるコンテキストでは、拡張 JSON 形式を使用しないでください。DBRef メカニズムは、この一般ルールの例外です。
フィールド名にピリオド(.)が含まれる状態での mongoimport と mongoexport の使用にも制限があります。CSV ファイルではデータ階層を表すのにピリオド(.)が使用されるため、フィールド名のピリオド(.)はネストのレベルと誤解されます。
詳細
ピリオドとドル記号を含むフィールド名を処理する方法の例については、次のページを参照してください。