유효성 검사를 추가하기 전에 컬렉션에 이미 존재하는 문서의 경우 MongoDB가 이러한 문서에 유효성 검사 규칙을 적용하는 방법을 지정할 수 있습니다.
Context
스키마의 validationLevel에 따라 MongoDB가 유효성 검사 규칙을 적용하는 문서가 결정됩니다.
유효성 검사 수준 | 행동 |
|---|---|
| MongoDB 는 유효성 검사 검사 규칙과 일치하는 기존의 유효한 문서에 대한 문서 삽입 및 업데이트에 동일한 유효성 검사 규칙을 적용합니다. 유효성 검사 규칙과 일치하지 않는 컬렉션 의 기존 문서에 대한 업데이트는 유효성 검사 검사를 통과할 필요가 없습니다. |
| (기본값) MongoDB 는 모든 문서 삽입 및 업데이트에 동일한 유효성 검사 규칙을 적용합니다. |
| MongoDB는 모든 문서 삽입 및 업데이트에 유효성 검사 규칙을 적용하며, 컬렉션의 모든 문서가 해당 규칙을 충족하도록 보장합니다.
버전 9.0에 추가 되었습니다. |
전제 조건
이 페이지의 예시에서는 movies 컬렉션을 사용합니다. 예시에서 사용하는 컬렉션을 만들고 문서를 삽입하려면 다음 명령을 실행하세요.
db.movies.insertMany( [ { title: "The Godfather", year: 1972 }, { title: "Casablanca", year: 1942 }] )보통 유효성 검사 지정
다음 예시에서는 movies 컬렉션에 moderate 유효성 검사기를 추가하고 유효성 검사 규칙을 충족하는 문서를 삽입합니다.
유효성 유효성 검사 moderate 유효성 검사 규칙을 지정합니다.
moderate validationLevel을 사용하여 movies 컬렉션에 유효성 검사기를 추가합니다.
db.runCommand( { collMod: "movies", validator: { $jsonSchema: { bsonType: "object", required: [ "title" ], properties: { title: { bsonType: "string", description: "title must be a string and is required" } } } }, validationLevel: "moderate"} )validationLevel가 moderate이기 때문에 MongoDB는 모든 문서 삽입에 대해 유효성 검사 규칙을 적용하고, 이미 규칙을 충족하는 기존 문서의 업데이트에 대해서도 적용합니다.
엄격한 유효성 검사 지정
다음 예시에서는 movies 컬렉션에 strict 유효성 검사기를 추가하고 유효성 검사 규칙을 충족하는 문서를 삽입합니다.
유효성 유효성 검사 strict 유효성 검사 규칙을 지정합니다.
strict validationLevel을 사용하여 movies 컬렉션에 유효성 검사기를 추가합니다.
db.runCommand( { collMod: "movies", validator: { $jsonSchema: { bsonType: "object", required: [ "title" ], properties: { title: { bsonType: "string", description: "title must be a string and is required" } } } }, validationLevel: "strict"} )validationLevel가 strict이기 때문에 MongoDB는 모든 문서 삽입 및 업데이트에 유효성 검사 규칙을 적용합니다.
참고
strict 유효성 검사로 업그레이드하면 MongoDB는 컬렉션의 기존 문서가 유효성 검사기를 통과하는지 소급하여 확인하지 않습니다. 업그레이드 후, 컬렉션에 업그레이드 전에 존재하던 유효하지 않은 문서가 포함될 수 있습니다. 그러나 유효하지 않은 문서에 대한 업데이트 작업은 유효성 검사기 때문에 실패합니다. 유효하지 않은 문서를 업데이트하려면 먼저 유효성 검사기를 통과하지 못하는 문제를 해결해야 합니다.
제약 조건 유효성 검사 지정
다음 예에서는 movies 컬렉션을 constraint 유효성 검사 수준으로 업그레이드합니다. constraint 수준으로 업그레이드하면 MongoDB는 컬렉션에 이미 있는 모든 문서가 유효성 검사기를 충족하는지 확인합니다.
참고
다음 절차는 이미 존재하는 컬렉션에 적용됩니다. 컬렉션을 생성할 때 validationLevel을(를) constraint (으)로 설정하면 먼저 수준을 strict (으)로 설정하거나 컬렉션을 준비할 필요가 없습니다.
(조건부) validationLevel을(를) strict(으)로 설정합니다.
컬렉션의 validationLevel이 이미 strict이 아니라면, 다음 절차를 수행하세요. 엄격한 유효성 검사 지정
constraint 수준에 맞게 컬렉션을 준비합니다.
prepareConstraintValidationLevel을(를) true(으)로 설정하고 collMod을(를) 실행합니다.
db.runCommand( { collMod: "movies", prepareConstraintValidationLevel: true} )이 명령은 bypassDocumentValidation을 차단하고 유효성 검사기에 대한 변경을 방지하여 업그레이드를 위해 컬렉션을 준비합니다. MongoDB가 우회를 제한하는 방법을 알아보려면 스키마 유효성 검사 우회를 참조하세요.
유효성 검사 수준을 constraint으로 설정합니다.
validationLevel을(를) constraint(으)로 설정하려면 collMod을(를) 실행하세요. validationAction은(는) error 또는 errorAndLog이어야 합니다.
db.runCommand( { collMod: "movies", validationLevel: "constraint", validationAction: "error"} )validationLevel를 constraint(으)로 업그레이드하는 동일한 collMod 작업에서는 validator을(를) 변경할 수 없습니다. 이 명령을 실행하기 전에 유효성 검사 규칙을 설정합니다. 나중에 규칙을 변경하려면 수준을 strict(으)로 다운그레이드하고, 규칙을 수정한 다음, 다시 constraint(으)로 업그레이드하십시오.
validationLevel이(가) constraint이므로 MongoDB는 업그레이드 전에 기존 문서가 규칙을 충족했는지 여부에 관계없이 모든 문서 삽입 및 업데이트에 유효성 검사 규칙을 적용합니다.
레벨을 constraint으로 설정하면 MongoDB는 컬렉션의 모든 기존 문서를 스캔하고 문서가 유효성 검사기를 위반하는 경우 collMod 작업에 실패합니다. 이 스캔은 대규모 컬렉션의 경우 계산 비용이 많이 들 수 있습니다. 작업이 실패하면 계속하기 전에 유효성 검사기를 통과하도록 위반 문서를 업데이트하세요.
중요
오류 출력은 사람이 볼 수 있도록 만들어졌습니다. 향후 변경될 수 있으며 스크립트에 의존해서는 안 됩니다.