JSON Schema 유효성 검사 팁
이 페이지에서는 일반적인 문제를 방지하는 데 도움이 되는 JSON schema 유효성 검사 권장사항에 대해 설명합니다.
_id
필드 및 additionalProperties: false
JSON schema에서 additionalProperties: false
지정하면 MongoDB는 스키마의 properties
객체에 포함되지 않은 필드가 포함된 문서를 거부합니다.
모든 객체에는 자동으로 생성된 _id
필드가 포함되어 있으므로 additionalProperties: false
설정 시 properties
객체에 _id
필드를 포함해야 합니다. 그렇지 않으면 모든 문서가 거부됩니다.
예를 들어, 이 유효성 검사에서는 유효한 문서가 없습니다:
{ "$jsonSchema": { "required": [ "_id", "storeLocation" ], "properties": { "storeLocation": { "bsonType": "string" } }, "additionalProperties": false } }
이 유효성 검사는 storeLocation
의 문자열 여부를 확인합니다. 그러나 properties
객체에 _id
필드가 포함되어 있지 않습니다.
컬렉션의 문서를 허용하려면 _id
필드를 포함하도록 properties
객체를 업데이트해야 합니다.
{ "$jsonSchema": { "required": [ "_id", "storeLocation" ], "properties": { "_id": { "bsonType": "objectId" }, "storeLocation": { "bsonType": "string" } }, "additionalProperties": false } }
필드 값에 대한 유효성 null
검사
컬렉션으로 전송된 객체에 해당 필드를 포함하지 않는 대신 누락된 필드 값을 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 을 활성화한 경우 유효성 검사 에는 다음과 같은 제한 사항이 적용됩니다.
CSFLE의 경우
collMod
를 실행할 때 libmongocrypt 라이브러리는 명령에 지정된 JSON 암호화 스키마를 선호합니다. 이렇게 하면 아직 스키마가 없는 컬렉션에 스키마를 설정할 수 있습니다.Queryable Encryption의 경우 암호화된 필드를 포함하는 JSON schema로 인해 쿼리 분석 오류가 발생합니다.