許可されるフィールド値の指定
JSON schemaを作成するときに、特定のフィールドで許可される値を指定できます。 この機能を使用して、フィールドの値が、国のリストなど、予期される値のセットに属していることを確認します。 同様に、この機能を使用すると、コレクションにデータを挿入する際に入力ミスなどの人為的ミスを防ぐことができます。
Context
許可される値のリストを指定するには、JSON schema で enum
キーワードを使用します。enum
キーワードは「列挙」を意味し、フィールドの可能な値をリスト化するために使用されます。
手順
フランス、英国、米国にのみ製品を出荷する衣料品会社を考えてみましょう。バリデーターでは、許可されている国の値を一覧表示したり、別の国を指定するドキュメントを拒否したりできます。
1
enum
を含む検証を使用してコレクションを作成します。
shipping
コレクションを作成し、$jsonSchema
演算子を使用してスキーマ検証を設定します。
db.createCollection("shipping", { validator: { $jsonSchema: { bsonType: "object", title: "Shipping Country Validation", properties: { country: { enum: [ "France", "United Kingdom", "United States" ], description: "Must be either France, United Kingdom, or United States" } } } } } )
country
オブジェクトの enum
フィールドでは、country
フィールドが France
、United
Kingdom
、または United States
のいずれかのドキュメントのみが許可されます。
2
検証により無効なドキュメントを防止することを確認します。
次の挿入操作は、country
が許可されている値のリストにない Germany
であるために失敗します。
db.shipping.insertOne( { item: "sweater", size: "medium", country: "Germany" } )
この操作は、次のエラーを返します。
MongoServerError: Document failed validation Additional information: { failingDocumentId: ObjectId("630d1057931191850b40d0aa"), details: { operatorName: '$jsonSchema', title: 'Shipping Country Validation', schemaRulesNotSatisfied: [ { operatorName: 'properties', propertiesNotSatisfied: [ { propertyName: 'country', description: 'Must be either France, United Kingdom, or United States', details: [ { operatorName: 'enum', specifiedAs: { enum: [ 'France', 'United Kingdom', 'United States' ] }, reason: 'value was not found in enum', consideredValue: 'Germany' } ] } ] } ] } }
3