スキーマ検証
Overview
このガイドでは、Rust ドライバーを使用して MongoDB コレクションのスキーマ検証を実装する方法を学習できます。
スキーマ検証を実装するには、一連の検証ルールで構成される JSON schema を提供する必要があります。 スキーマ検証を実装すると、サーバーは検証ルールに従う書込み操作のみを実行できるようになります。 スキーマ検証 を使用して、指定されたコレクション内のドキュメント フィールドのデータ型と値の範囲を制限します。
ドライバー メソッドを使用してコレクションを作成するときにスキーマ検証ルールを定義することも、 collMod
MongoDB コマンドを使用して既存のコレクションに追加することもできます。 このガイドでは、コレクションの作成時にスキーマ検証を有効にする方法のみについて説明します。 既存のコレクションでスキーマ検証を有効にする方法の詳細については、サーバー マニュアルの collModを参照してください。
JSON スキーマ検証
スキーマ検証ルールを使用してコレクションを作成する前に、 JSON schemaを定義する必要があります。
JSON schema は、コレクションの 検証ルールを指定するキーと値のペアを含む JSON オブジェクトです。 最上位では、このオブジェクトには$jsonSchema
オブジェクトが含まれている必要があります。 $jsonSchema
オブジェクトには次のフィールドが含まれます。
title : スキーマの説明を任意に設定します。
必須: コレクション内の各ドキュメントの必須 フィールドのリストを指定します。
properties : 個々のフィールドのプロパティ要件を設定します。
JSON schemaオブジェクト フィールドの完全なリストについては、サーバー マニュアルの「 JSON schema 」を参照してください。
スキーマ検証の実装
スキーマと関連するオプションをCreateCollectionOptions
オプション ビルダ メソッドに渡すことで、スキーマ検証を実装できます。
注意
設定オプション
オプション ビルダのメソッドをcreate_collection()
メソッド呼び出しに直接連鎖させることで、 CreateCollectionOptions
フィールドを設定できます。 以前のバージョンのドライバーを使用している場合は、オプション ビルダー メソッドをbuilder()
メソッドに連結してCreateCollectionOptions
インスタンスを構築する必要があります。
新しいコレクションの検証オプションを指定するには、次のCreateCollectionOptions
メソッドを呼び出します。
方式 | 説明 |
---|---|
validator() | JSON schemaを渡すことでコレクションの検証ルールを指定します。 詳細については、このページの「 JSON schemaの検証」セクションを参照してください。 |
validation_level() | どの挿入操作とアップデート操作が検証ルールの対象となるかを指定します。 Possible values: |
validation_action() | 検証ルールに従さないドキュメントを挿入した場合に、ドライバーがエラーをスローするか警告をスローするかを指定します。 Possible values: |
例
この例では、次の検証仕様で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"), ... })})) })), ... }
Tip
スキーマ検証のバイパス
コレクションの検証ルールをバイパスするには、書き込みメソッドのオプション パラメーターでbypass_document_validation
フィールドをtrue
に設定します。 これにより、コレクションの検証ルールとvalidation_level
によって定義されたその除外ルールは無視されます。
insert_one()
メソッドのオプションでこの設定を指定する方法の例については、ドキュメントの挿入 ガイドの insert_one の動作を変更する セクションを参照してください。
詳細情報
このページで言及されている MongoDB Server 操作の詳細については、サーバー マニュアルの次のドキュメントを参照してください。
API ドキュメント
検証レベルとアクションの設定の詳細については、次の API ドキュメントを参照してください。
ヘルパーメソッドの validation_level
validation_level()
ValidationLevel 可能な
validation_level
値validation_action
validation_action()
ヘルパー メソッドのValidationAction 可能な
validation_action
値
このガイドで参照されている他のメソッドやタイプの詳細については、次のドキュメントを参照してください。