컬렉션에 스키마 유효성 검사를 추가한 후 언제든지 유효성 검사 규칙을 수정할 수 있습니다. 예를 들어, 다음과 같이 결정할 수 있습니다.
users컬렉션의 해당 문서에는 더 이상 이메일 주소가 필요하지 않습니다.password필드의 최소 길이를 8자에서 12자로 늘립니다.
컬렉션의 스키마 유효성 검사를 수정하려면 collMod 명령을 사용하고 validator 객체에서 업데이트된 유효성 검사를 지정합니다.
이 작업에 관한 정보
규칙, 유효성 검사 수준 및 유효성 검사 조치 포함하여 스키마 유효성 검사 의 대부분의 구성 요소를 수정할 수 있습니다.
참고
유효성 검사 수준을 constraint로 설정하다 스키마 유효성 검사 규칙을 직접 수정할 수 없습니다. 유효성 검사 규칙을 변경하려면 strict(으)로 다운그레이드하고 규칙을 수정한 다음 constraint(으)로 다시 업그레이드 . 이 절차에 대한 자세한 내용은 제약 조건 유효성 검사 지정을 참조하세요.
컬렉션의 유효성 검사 규칙을 업데이트 하면 유효성 검사 변경 전에 삽입된 문서가 더 이상 유효하지 않을 수 있습니다. MongoDB validationLevel에 따라 기존의 유효하지 않은 문서를 다르게 처리합니다.
strict 및 moderate 수준에서 MongoDB 문서 삽입하거나 업데이트 때 유효성 검사 검사를 적용하지만 컬렉션 에 이미 있는 문서에 대해서는 소급하여 유효성을 검사하지 않습니다. 이미 유효하지 않은 문서 에 대한 업데이트 업데이트 자체로 인해 위반 사항이 발생하지 않더라도 실패합니다.
constraint 수준에서 MongoDB 해당 수준으로 업그레이드 때 전체 컬렉션 유효성을 검사합니다. strict로 다운그레이드하고 규칙을 수정한 다음 다시 constraint로 업그레이드 경우, 새 규칙과 일치하는 문서 없으면 업그레이드 가 실패합니다.
단계
다음 절차는 유효성 검사 규칙이 있는 컬렉션을 생성한 후 해당 규칙을 수정하는 방법을 설명합니다.
유효성 검사를 사용하는 컬렉션을 생성합니다.
users 유효성 검사 규칙을 사용하여 컬렉션을 만듭니다.
db.createCollection("users", { validator: { $jsonSchema: { bsonType: "object", required: [ "username", "password" ], properties: { username: { bsonType: "string", description: "must be a string and is required" }, password: { bsonType: "string", minLength: 8, description: "must be a string at least 8 characters long, and is required" } } } } } )
유효성 검사 스키마를 수정합니다.
다음 collMod 명령을 실행하여 password 필드의 minLength를 8에서 12로 변경합니다:
db.runCommand( { collMod: "users", validator: { $jsonSchema: { bsonType: "object", required: [ "username", "password" ], properties: { username: { bsonType: "string", description: "must be a string and is required" }, password: { bsonType: "string", minLength: 12, description: "must be a string of at least 12 characters, and is required" } } } } } )
팁
collMod명령은 유효성 검증이 없이 생성된 기존 컬렉션에 유효성 검증을 추가하는 데에도 사용할 수 있습니다.
결과
다음 섹션에서는 이러한 시나리오에서 업데이트된 유효성 검사 결과를 보여줍니다:
유효하지 않은 문서를 삽입한 경우.
유효한 문서를 삽입하는 경우.
유효성 검사 규칙 변경으로 인해 이전에 유효했던 문서가 유효하지 않게 된 경우입니다.
잘못된 문서 삽입
다음 작업은 잘못된 문서를 삽입하려고 시도합니다. 최소 길이가 12자일 때 password 필드의 길이가 10자인 문서는 유효하지 않습니다.
db.users.insertOne( { "username": "salesAdmin01", "password": "kT9$j4wg#M" } )
MongoDB는 다음 오류를 반환합니다.
MongoServerError: Document failed validation Additional information: { failingDocumentId: ObjectId("62be0adb73c105dde9231299"), details: { operatorName: '$jsonSchema', schemaRulesNotSatisfied: [ { operatorName: 'properties', propertiesNotSatisfied: [ { propertyName: 'password', description: 'must be a string of at least 8 characters, and is required', details: [ { operatorName: 'minLength', specifiedAs: { minLength: 12 }, reason: 'specified string length was not satisfied', consideredValue: 'kT9$j4wg#M' } ] } ] } ] } }
유효한 문서 삽입
다음 작업은 password 필드 길이가 12자 이상인 유효한 문서를 삽입합니다.
db.users.insertOne( { "username": "salesAdmin01", "password": "8p&SQd7T90$KKx" } )
이전에 유효했던 문서가 더 이상 유효하지 않은 경우 처리
스키마 검증의 첫 번째 버전에는 유효하지만 두 번째 버전에는 유효하지 않은 다음 문서를 고려하십시오.
db.users.insertOne( { "username": "salesAdmin02", "password": "i8U60*VyL8" } )
문서의 password 필드는 10자입니다. 스키마 검증의 첫 번째 버전에서는 최소 8자가 필요했기 때문에 이 문서는 유효합니다. 그러나 password 가 최소 12자가 되도록 유효성 검증을 업데이트한 후에는 이 문서가 유효성을 잃습니다.
스키마 유효성 검증의 변경으로 인해 이전에 유효했던 문서가 유효하지 않게 되면, 그 문서는 컬렉션에 그대로 남아 있게 됩니다.
MongoDB가 새로 유효하지 않게 된 문서를 처리하는 방식은 스키마의 validationLevel에 따라 다릅니다. 이 예시의 스키마 유효성 검사에서는 기본 strict의 validationLevel을 사용하며 이는 문서는 새 유효성 검사 규칙과 일치해야 함을 의미합니다. MongoDB는 문서가 업데이트될 때마다 유효성 검사를 수행합니다.
업데이트된 스키마 유효성 검사의 validationLevel이 moderate인 경우 이 문서는 새 유효성 검사 규칙과 일치할 필요가 없습니다.