AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

스키마 유효성 검사 수정

컬렉션에 스키마 유효성 검사를 추가한 후 언제든지 유효성 검사 규칙을 수정할 수 있습니다. 예를 들어, 다음과 같이 결정할 수 있습니다.

  • users 컬렉션의 해당 문서에는 더 이상 이메일 주소가 필요하지 않습니다.

  • password 필드의 최소 길이를 8자에서 12자로 늘립니다.

컬렉션의 스키마 유효성 검사를 수정하려면 collMod 명령을 사용하고 validator 객체에서 업데이트된 유효성 검사를 지정합니다.

규칙, 유효성 검사 수준, 유효성 검사 조치를 포함하여 스키마 유효성 검사의 대부분의 구성 요소를 수정할 수 있습니다.

참고

유효성 검사 수준을 constraint(으)로 설정하면 스키마 유효성 검사 규칙을 직접 수정할 수 없습니다. 유효성 검사 규칙을 변경하려면 strict(으)로 다운그레이드하고 규칙을 수정한 다음 constraint(으)로 다시 업그레이드하세요. 이 절차에 대한 자세한 내용은 제약 조건 유효성 검사 지정을 참조하세요.

컬렉션의 유효성 검사 규칙을 업데이트하면 유효성 검사 변경 이전에 삽입한 문서가 더 이상 유효하지 않을 수 있습니다. MongoDB는 validationLevel에 따라 이전에 존재했던 이러한 유효하지 않은 문서를 다르게 처리합니다.

strict 및 moderate 수준에서 MongoDB는 문서를 삽입하거나 업데이트할 때 유효성 검사를 적용하지만 컬렉션에 이미 있는 문서는 소급하여 검사하지 않습니다. 이미 유효하지 않은 문서에 대한 업데이트는 업데이트 자체에서 위반 사항이 발생하지 않더라도 실패합니다.

constraint 수준에서 MongoDB는 해당 수준으로 업그레이드할 때 전체 컬렉션의 유효성을 검사합니다. strict로 다운그레이드하고 규칙을 수정한 다음 constraint로 다시 업그레이드하면 문서가 새 규칙과 일치하지 않을 경우 업그레이드가 실패합니다.

다음 절차는 유효성 검사 규칙이 있는 컬렉션을 생성한 후 해당 규칙을 수정하는 방법을 설명합니다.

1

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"
}
}
}
}
} )
2

다음 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인 경우 이 문서는 새 유효성 검사 규칙과 일치할 필요가 없습니다.