스키마 유효성 검사 수정
이 페이지의 내용
컬렉션에 스키마 유효성 검사를 추가한 후 언제든지 유효성 검사 규칙을 수정할 수 있습니다. 예를 들어, 다음과 같이 결정할 수 있습니다.
users
컬렉션의 문서는 이제 이메일 주소를 필요로 하지 않습니다.password
필드의 최소 길이를 8자에서 12자로 늘립니다.
컬렉션의 스키마 유효성 검사 를 수정하려면 collMod
명령을 사용하고 validator
객체 에 업데이트된 유효성 검사 를 지정합니다.
이 작업에 관한 정보
스키마 검증의 모든 구성 요소를 수정할 수 있으며, 이는 규칙, 검증 수준 및 조치를 포함합니다.
컬렉션의 검증 규칙을 업데이트하면 검증 변경 이전에 삽입한 문서가 더 이상 유효하지 않을 수 있습니다. MongoDB가 이러한 유효하지 않은 문서를 처리하는 방법은 validationLevel
에 따라 다릅니다. 기본적으로 MongoDB는 문서가 삽입된 시점에 관계없이 모든 문서에 유효성 검사를 적용합니다.
단계
다음 절차는 유효성 검사 규칙이 있는 컬렉션을 생성한 후 해당 규칙을 수정하는 방법을 설명합니다.
유효성 검사를 사용하는 컬렉션을 생성합니다.
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
인 경우 이 문서는 새 유효성 검사 규칙과 일치할 필요가 없습니다.