AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

JSON schema 検証のヒント

このページでは、一般的な問題を回避するための JSON schema 検証のベストプラクティスについて説明します。

JSON schema でadditionalProperties: falseを指定すると、MongoDB は schema のpropertiesオブジェクトに含まれていないフィールドを含むドキュメントを拒否します。

すべてのオブジェクトには自動生成された_idフィールドが含まれているため、additionalProperties: falseを設定するときは、properties オブジェクトに _id フィールドを含める必要があります。含めない場合、すべてのドキュメントが拒否されます。

たとえば以下の検証では、有効なドキュメントはありません。

{ "$jsonSchema": { "required": [ "_id", "storeLocation" ], "properties": { "storeLocation": { "bsonType": "string" } }, "additionalProperties": false }}

この検証により、 storeLocationは文字列であることが保証されます。ただし、 propertiesオブジェクトには_idフィールドが含まれていません。

コレクション内のドキュメントを許可するには、 propertiesオブジェクトをアップデートして_idフィールドを含める必要があります。

{ "$jsonSchema": { "required": [ "_id", "storeLocation" ], "properties": { "_id": { "bsonType": "objectId" }, "storeLocation": { "bsonType": "string" } }, "additionalProperties": false }}

コレクションに送信されるオブジェクトに欠落しているフィールド値を含めない代わりに、欠落しているフィールド値を null に設定するようにアプリケーションが設定されている場合があります。

スキーマがフィールドのデータ型を検証する場合、そのフィールドに null 値を持つドキュメントを挿入するには、null を有効な BSON 型として明示的に許可する必要があります。

たとえば次のスキーマ検証では、 storeLocation がnull であるドキュメントは許可されません。

db.createCollection("sales", { validator: { "$jsonSchema": { "properties": { "storeLocation": { "bsonType": "string" } } } } } )

上記の検証により、このドキュメントは拒否されます。

db.store.insertOne( { storeLocation: null } )

一方、こちらのスキーマ検証では、 storeLocationのnull値が許可されます。

db.createCollection("store", { validator: { "$jsonSchema": { "properties": { "storeLocation": { "bsonType": [ "null", "string" ] } } } } } )

上記の検証により、このドキュメントは許可されます。

db.store.insertOne( { storeLocation: null } )

注意

null フィールドと欠落フィールドの比較

null フィールド値は、フィールドの欠落とは異なります。ドキュメントにフィールドがない場合、MongoDB はそのフィールドを検証しません。

コレクションでクライアント側フィールドレベル暗号化またはQueryable Encryptionが有効になっている場合、検証は次の制限の対象となります。

  • collMod の実行中時に、libmongocrypt ライブラリは CSFLE に対して、コマンドで指定されるJSON暗号化スキーマを優先します。この設定により、まだスキーマがないコレクションにスキーマを設定できます。

  • Queryable Encryption の場合、暗号化されたフィールドを含む JSON schema はクエリ分析エラーになります。