Docs 菜单
Docs 主页
/ / /
Rust 驱动程序
/

模式验证

在此页面上

  • Overview
  • JSON 模式验证
  • 实施模式验证
  • 例子
  • 更多信息
  • API 文档

在本指南中,您可以了解如何使用 Rust 驱动程序为 MongoDB 集合实施模式验证

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

您可以在使用驱动程序方法创建集合时定义模式验证规则,也可以使用 collMod MongoDB 命令将它们添加到现有集合。 本指南仅介绍如何在创建集合时启用模式验证。 要了解有关对现有集合启用模式验证的更多信息,请参阅 MongoDB Server手册中的 collMod 。

在使用模式验证规则创建集合之前,必须定义 JSON schema。

JSON schema是一个 JSON 对象,其中包含指定集合验证规则的键值对。 在顶层,该对象必须包含一个$jsonSchema对象。 $jsonSchema对象包括以下字段:

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

  • 必填:指定集合中每个文档的必填字段列表。

  • properties :设置各个字段的属性要求。

JSON schema有关 对象字段的完整列表,请参阅JSON schema MongoDB Server手册中的 。

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

注意

设置选项

您可以通过将选项构建器方法直接链接到create_collection()方法调用来设立CreateCollectionOptions字段。 如果使用的是早期版本的驾驶员,则必须通过将选项构建器方法链接到builder()方法来构造CreateCollectionOptions实例。

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

方法
说明

validator()

通过传递 JSON schema 来指定集合的验证规则。

有关更多信息,请参阅本页上的 JSON 模式验证部分。

validation_level()

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

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

validation_action()

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

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

此示例使用以下验证规范创建一个名为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 文档:

要进一步了解本指南中引用的任何其他方法或类型,请参阅以下文档:

后退

数据库和collection