Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

JSON Schema 유효성 검사 팁

이 페이지의 내용

  • _id 필드 및 additionalProperties: false
  • null 필드 값에 대한 유효성 검사
  • 암호화된 필드를 사용한 유효성 검사

이 페이지에서는 일반적인 문제를 방지하는 데 도움이 되는 JSON 스키마 유효성 검사 권장사항에 대해 설명합니다.

JSON 스키마에서 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 을 유효한 BSON 유형으로 명시적으로 허용해야 합니다.

예를 들어, 이 스키마 유효성 검사는 storeLocationnull인 문서를 허용하지 않습니다:

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로 인해 쿼리 분석 오류가 발생합니다.

돌아가기

필드 값 지정