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