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

Specify JSON Schema Validation

JSON schema は、 JSONドキュメントに注釈を付けて検証するための語彙です。JSON schema を使用して、人間が判読できる形式でフィールドの検証ルールを指定します。

MongoDBは、いくつか違いはあるものの、コア仕様 および 検証仕様 を含むJSON schemaのドラフト 4 をサポートしています。詳細については、「拡張機能」と「省略」を参照してください。

JSON schema の詳細については、 公式ウェブサイトを参照してください。

次のスキーマ検証は指定することはできません。

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

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

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

この例では、検証ルールを含む students コレクションを作成し、無効なドキュメントを挿入しようとした後の結果を確認します。

1

mongosh を使用してローカルMongoDBインスタンスまたはMongoDB Atlas配置に接続するには、「配置への接続」または「mongosh経由での接続」を参照してください。

2

mongoshでは、次のコマンドを実行してstudentsコレクションを作成し、 $jsonSchema演算子を使用してスキーマ検証ルールを設定します。

db.createCollection("students", { validator: { $jsonSchema: { bsonType: "object", title: "Student Object Validation", required: [ "address", "major", "name", "year" ], properties: { name: { bsonType: "string", description: "'name' must be a string and is required" }, year: { bsonType: "int", minimum: 2017, maximum: 3017, description: "'year' must be an integer in [ 2017, 3017 ] and is required" }, gpa: { bsonType: [ "double" ], description: "'gpa' must be a double if the field exists" } } } }} )

Tip

Title フィールドと Description フィールドでルールを明確化

すぐには明確にならない検証ルールを説明するには、title フィールドと description フィールドを使用します。ドキュメントの検証に失敗した場合、 MongoDB はこれらのフィールドをエラー出力に記録します。

3

gpa フィールドの値を double タイプに変更すると、挿入操作は成功します。有効なドキュメントを挿入するには、次のコマンドを実行します。

db.students.insertOne( { name: "Alice", year: Int32( 2019 ), major: "History", gpa: Double( 3.0 ), address: { city: "NYC", street: "33rd Street" }} )

注意

無効なドキュメントを挿入しようとすると、MongoDB はエラーを返します。

4

ドキュメントが正常に挿入されたことを確認するには、次のコマンドで students コレクションのクエリを実行します。

db.students.find()
[ { _id: ..., name: 'Alice', year: 2019, major: 'History', gpa: 3, address: { city: 'NYC', street: '33rd Street' } }]

Tip

Atlas 配置に接続している場合、Atlas UI でのドキュメントの表示とフィルタリングも可能になりました。

JSON schema 検証とクエリ演算子の検証を組み合わせることができます。

例として、こちらのスキーマ検証を含む sales コレクションを考えます。

db.createCollection("sales", { validator: { "$and": [ // Validation with query operators { "$expr": { "$lt": ["$lineItems.discountedPrice", "$lineItems.price"] } }, // Validation with JSON Schema { "$jsonSchema": { "properties": { "items": { "bsonType": "array" } } } } ] } })

上記の検証により、sales コレクション内のドキュメントに対して次のルールが強制されます。

  • lineItems.discountedPrice は、lineItems.price 未満である必要があります。このルールでは $lt 演算子が使用されます。

  • itemsフィールドは配列である必要があります。このルールでは $jsonSchema を使用します。

ルール バッジを取得する

「高度なスキーマ パターンとアンパターン」を無料でマスターします。

詳細

このページを評価