Docs Menu
Docs Home
/ / /
Rust ドライバー
/

スキーマ検証

項目一覧

  • Overview
  • JSON スキーマ検証
  • スキーマ検証の実装
  • 詳細情報
  • API ドキュメント

このガイドでは、Rust ドライバーを使用して MongoDB コレクションのスキーマ検証を実装する方法を学習できます。

スキーマ検証を実装するには、一連の検証ルールで構成される JSON schema を提供する必要があります。 スキーマ検証を実装すると、サーバーは検証ルールに従う書込み操作のみを実行できるようになります。 スキーマ検証 を使用して、指定されたコレクション内のドキュメント フィールドのデータ型と値の範囲を制限します。

ドライバー メソッドを使用してコレクションを作成するときにスキーマ検証ルールを定義することも、 collMod MongoDB コマンドを使用して既存のコレクションに追加することもできます。 このガイドでは、コレクションの作成時にスキーマ検証を有効にする方法のみについて説明します。 既存のコレクションでスキーマ検証を有効にする方法の詳細については、サーバー マニュアルの collModを参照してください。

スキーマ検証ルールを使用してコレクションを作成する前に、 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: ValidationLevel::Off, ValidationLevel::Strict, ValidationLevel::Moderate.

validation_action()

検証ルールに従さないドキュメントを挿入した場合に、ドライバーがエラーをスローするか警告をスローするかを指定します。

Possible values: ValidationAction::Error, ValidationAction::Warn.

この例では、次の検証仕様で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 ドキュメントを参照してください。

このガイドで参照されている他のメソッドやタイプの詳細については、次のドキュメントを参照してください。

戻る

データベースとコレクション