模式验证
Overview
在本指南中,您可以了解如何使用 Rust 驱动程序为 MongoDB 集合实施模式验证。
要实施模式验证,您必须提供由一组验证规则组成的 JSON schema。 如果实施模式验证,则服务器只允许您运行遵循验证规则的写入操作。 使用模式验证来限制指定集合中文档字段的数据类型和值范围。
您可以在使用驱动程序方法创建集合时定义模式验证规则,也可以使用 collMod
MongoDB 命令将它们添加到现有集合。 本指南仅介绍如何在创建集合时启用模式验证。 要了解有关对现有集合启用模式验证的更多信息,请参阅 MongoDB Server手册中的 collMod 。
JSON 模式验证
在使用模式验证规则创建集合之前,必须定义 JSON schema。
JSON schema是一个 JSON 对象,其中包含指定集合验证规则的键值对。 在顶层,该对象必须包含一个$jsonSchema
对象。 $jsonSchema
对象包括以下字段:
title :设置模式的可选描述。
必填:指定集合中每个文档的必填字段列表。
properties :设置各个字段的属性要求。
JSON schema有关 对象字段的完整列表,请参阅JSON schema MongoDB Server手册中的 。
实施模式验证
您可以通过将模式和相关选项传递给CreateCollectionOptions
选项构建器方法来实现模式验证。
注意
设置选项
您可以通过将选项构建器方法直接链接到create_collection()
方法调用来设立CreateCollectionOptions
字段。 如果使用的是早期版本的驾驶员,则必须通过将选项构建器方法链接到builder()
方法来构造CreateCollectionOptions
实例。
调用以下CreateCollectionOptions
方法为新集合指定验证选项:
方法 | 说明 |
---|---|
| 通过传递 JSON schema 来指定集合的验证规则。 有关更多信息,请参阅本页上的 JSON 模式验证部分。 |
| 指定哪些插入和更新操作受验证规则的约束。 可能的值: |
| 指定如果插入不遵循验证规则的文档,驱动程序是抛出错误还是警告。 可能的值: |
例子
此示例使用以下验证规范创建一个名为survey_answers
的集合:
validator()
方法接收 JSON schema,指定每个文档中的answer
字段的值必须为"yes"
或"no"
。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
值
要进一步了解本指南中引用的任何其他方法或类型,请参阅以下文档: