허용된 필드 값 지정
JSON Schema를 생성할 때 특정 필드에 허용되는 값을 지정할 수 있습니다. 이 기능을 통해 필드 값이 예상되는 값 세트(예: 국가 목록)에 속하도록 할 수 있습니다. 이 기능을 사용하면 컬렉션에 데이터를 삽입할 때 인간의 오류(예: 오타)를 방지할 수도 있습니다.
Context
허용되는 값의 목록을 지정하려면 JSON schema에 enum
키워드를 사용합니다. enum
키워드는 "열거"를 의미하며, 필드의 가능한 값을 나열하는 데 사용됩니다.
단계
프랑스, 영국, 미국에만 제품을 배송하는 의류 회사를 생각해 보겠습니다. 유효성 검사기에서 허용된 국가 값을 나열하고, 다른 국가를 지정하는 문서를 거부할 수 있습니다.
1
이 포함된 유효성 검사 를 사용하여 컬렉션 을 enum
만듭니다.
0} 컬렉션을 $jsonSchema
만들고 shipping
연산자를 사용하여 스키마 유효성 검사 규칙을 설정합니다.
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