文档菜单
文档首页
/ / /
Rust 驱动程序
/

模式验证

本页内容

  • 概述
  • JSON模式验证
  • 实现模式验证
  • 示例
  • 附加信息
  • API 文档

在本指南中,您可以学习如何使用Rust驱动程序为您的MongoDB集合实现模式验证。

要实现模式验证,您必须提供一个由一组验证规则组成的JSON模式。如果您实现了模式验证,服务器仅允许您运行遵循验证规则的写操作。使用模式验证来限制指定集合中文档字段的类型和值范围。

您可以在创建集合时通过使用驱动程序方法定义模式验证规则,或者通过使用collMod MongoDB命令将它们添加到现有集合中。本指南仅描述了在创建集合时启用模式验证的方法。有关在现有集合上启用模式验证的更多信息,请参阅collMod 服务器手册。

在创建具有模式验证规则的集合之前,您必须定义一个JSON模式。

JSON模式是一个包含指定集合验证规则的键值对的JSON对象。在顶级,此对象必须包含一个$jsonSchema对象。该$jsonSchema对象包括以下字段

  • title:为模式设置可选的描述。

  • required:指定每个文档的所需字段列表。

  • properties:为单个字段设置属性要求。

有关JSON模式对象字段的完整列表,请参阅服务器手册中的JSON Schema

您可以通过将模式和相关选项传递给CreateCollectionOptions选项构建器方法来实现模式验证。

注意

设置选项

您可以通过直接将选项构建器方法链接到create_collection()方法调用来设置CreateCollectionOptions字段。如果您正在使用更早版本的驱动程序,您必须通过将选项构建器方法链接到builder()方法来构建一个CreateCollectionOptions实例。

调用以下CreateCollectionOptions方法来指定新集合的验证选项

方法
描述
validator()

通过传递JSON模式指定集合的验证规则。

有关更多信息,请参阅本页上的JSON Schema Validation部分。

validation_level()

指定哪些插入和更新操作受验证规则的约束。

可能的值:ValidationLevel::OffValidationLevel::StrictValidationLevel::Moderate

validation_action()

指定如果插入的文档不遵循验证规则,驱动程序是否抛出错误或警告。

可能的值:ValidationAction::ErrorValidationAction::Warn

此示例创建了一个名为survey_answers的集合,具有以下验证规范

  • validator() 方法接收一个 JSON 模式,指定每个文档中的 answer 字段必须具有 "yes""no" 的值。

  • validation_action() 方法指定当写操作违反验证规则时,驱动器是否抛出 Error

  • validation_level() 方法指定验证为 中等,因此验证规则仅适用于现有有效文档的插入和更新。

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 服务器操作的更多信息,请参阅服务器手册中的以下文档

有关设置验证级别和操作的更多信息,请参阅以下 API 文档

要了解更多关于此指南中引用的其他方法或类型,请参阅以下文档

返回

数据库和集合