스키마 유효성 검사
개요
이 가이드에서는 Rust 드라이버를 사용하여 MongoDB 컬렉션에 대한 스키마 유효성 검사 를 구현하는 방법을 배울 수 있습니다.
스키마 유효성 검사를 구현하려면 유효성 검사 규칙 세트로 구성된 JSON schema를 제공해야 합니다. 스키마 유효성 검사를 구현하는 경우 서버는 유효성 검사 규칙을 따르는 쓰기 작업만 실행할 수 있습니다. 스키마 유효성 검사를 사용하여 지정된 컬렉션에 있는 문서 필드의 데이터 유형 및 값 범위를 제한합니다.
컬렉션을 생성할 때 드라이버 메서드를 사용하여 스키마 유효성 검사 규칙을 정의하거나 collMod
MongoDB 명령을 사용하여 기존 컬렉션에 추가할 수 있습니다. 이 가이드에서는 컬렉션을 생성할 때 스키마 유효성 검사를 활성화하는 방법에 대해서만 설명합니다. 기존 컬렉션에서 스키마 유효성 검사를 활성화하는 방법에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 collMod 를 참조하세요.
JSON Schema 유효성 검사
스키마 유효성 검사 규칙을 사용하여 컬렉션을 만들기 전에 JSON schema를 정의해야 합니다.
JSON schema는 컬렉션에 대한 유효성 검사 규칙을 지정하는 키-값 쌍을 포함하는 JSON 객체입니다. 최상위 수준에서 이 객체에는 $jsonSchema
객체가 포함되어야 합니다. $jsonSchema
객체에는 다음 필드가 포함되어 있습니다.
title: 스키마에 대한 선택적 설명을 설정합니다.
필수: 컬렉션의 각 문서에 대한 필수 필드 목록을 지정합니다.
속성: 개별 필드에 대한 속성 요구 사항을 설정합니다.
JSON schema 객체 필드의 전체 목록은 MongoDB Server 매뉴얼의 JSON schema 를 참조하세요.
스키마 유효성 검사 구현
스키마 및 관련 옵션을 CreateCollectionOptions
옵션 빌더 메서드에 전달하여 스키마 유효성 검사 를 구현 수 있습니다.
참고
설정 옵션
옵션 빌더 메서드를 create_collection()
메서드 호출에 직접 연결하여 CreateCollectionOptions
필드를 설정하다 수 있습니다. 이전 버전의 운전자 를 사용하는 경우 옵션 빌더 메서드를 builder()
메서드에 연결하여 CreateCollectionOptions
인스턴스 를 구성해야 합니다.
다음 CreateCollectionOptions
메서드를 호출하여 새 컬렉션 에 대한 유효성 검사 옵션을 지정합니다.
메서드 | 설명 |
---|---|
validator() | JSON schema를 전달하여 컬렉션에 대한 유효성 검사 규칙을 지정합니다. 자세한 내용은 이 페이지의 JSON Schema 유효성 검사 섹션을 참조하세요. |
validation_level() | 유효성 검사 규칙이 적용되는 삽입 및 업데이트 작업을 지정합니다. 가능한 값은 |
validation_action() | 유효성 검사 규칙을 따르지 않는 문서를 삽입하는 경우 드라이버에서 오류 또는 경고를 표시할지 여부를 지정합니다. 가능한 값: |
예시
이 예에서는 다음 유효성 검사 사양을 사용하여 survey_answers
라는 컬렉션을 만듭니다.
validator()
메서드는 각 문서의answer
필드에"yes"
또는"no"
값이 있어야 한다고 지정하는 JSON schema를 수신합니다.validation_action()
메서드는 쓰기 작업이 유효성 검사 규칙을 위반할 때 드라이버가Error
를 발생시킬지 여부를 지정합니다.validation_level()
메서드는 유효성 검사가Moderate
임을 지정하므로 유효성 검사 규칙은 기존의 유효한 문서에 대한 삽입 및 업데이트에만 적용됩니다.
let validator = doc! { "$jsonSchema": doc! { "bsonType": "object", "title": "Answer Value Validation", "properties": doc! { "answer": doc! { "enum": vec! [ "yes", "no" ], } } } }; db.create_collection("survey_answers") .validator(validator) .validation_action(ValidationAction::Error) .validation_level(ValidationLevel::Moderate) .await?;
다음 문서는 유효성 검사 규칙을 따르며 성공적으로 삽입될 수 있습니다.
{ "_id": { ... }, "question": "Do you like to exercise?", "answer": "yes" }, { "_id": { ... }, "question": "Do you like to play computer games?", "answer": "no" }
그러나 다음 문서를 삽입하려고 하면 answer
값이 유효한 옵션과 일치하지 않기 때문에 서버에서 오류가 발생합니다.
{ "_id": { ... }, "question": "Do you like to exercise?", "answer": "depends on my mood" }
Error: Error { kind: Write(WriteError(WriteError { code: 121, code_name: None, message: "Document failed validation", details: Some(Document({"failingDocumentId": ObjectId("..."), "details": Document({"operatorName": String("$jsonSchema"), "title": String("Answer Value Validation"), ... })})) })), ... }
팁
스키마 유효성 검사 우회
컬렉션의 유효성 검사 규칙을 우회하려면 쓰기 메서드의 옵션 매개변수에서 bypass_document_validation
필드를 true
로 설정합니다. 이렇게 하면 컬렉션에 대한 모든 유효성 검사 규칙과 validation_level
에서 정의한 해당 규칙의 예외가 무시됩니다.
insert_one()
메서드의 옵션에서 이 설정을 지정하는 방법의 예시 를 보려면 문서 삽입 가이드 의 insert_one 동작 수정 섹션을 참조하세요.
추가 정보
이 페이지에 언급된 MongoDB Server 작업에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 문서를 참조하세요.
API 문서
유효성 검사 수준 및 작업 설정에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.
validation_level
validation_level()
헬퍼 메서드의 경우ValidationLevel 가능한
validation_level
값validation_action
validation_action()
헬퍼 메서드의 경우ValidationAction 가능한
validation_action
값
이 가이드에 언급된 다른 메서드 또는 유형에 대해 자세히 알아보려면 다음 문서를 참조하세요.