文档菜单
文档首页
/ / /
Rust 驱动器

操作错误处理

本页内容

  • 概述
  • 错误类型
  • 连接错误
  • 写入错误类型
  • 写入关注错误
  • 写入错误

本页介绍了在使用 MongoDB Rust 驱动执行 MongoDB 操作时可能遇到的错误。一旦您了解了驱动器引发的操作错误类型,您就可以采取适当的措施来处理它们或修正导致错误的代码。

注意

本页仅涉及操作错误处理。如果您遇到任何与 MongoDB 或驱动器相关的问题,请访问以下资源

  • 连接故障排除,以获取解决连接 MongoDB 部署时可能遇到问题的潜在解决方案

  • 问题与帮助页面,获取有关报告错误、为驱动器做出贡献和查找更多资源的详细信息

  • MongoDB 社区论坛,用于提问、讨论或一般技术支持

如果驱动程序在执行操作时遇到错误,它将返回一个错误类型。

Error类型包含一个描述发生错误类型的kind字段。该kind字段的值为枚举ErrorKind。该ErrorKind枚举有不同的错误类型变体,包括以下几种

  • InvalidArgument:向方法提供了一个无效的参数

  • Authentication:驱动程序在身份验证过程中遇到了错误

  • ServerSelection:客户端无法选择操作的服务器

  • Write:在写入操作期间发生错误

  • Transaction:在事务期间发生错误

例如,如果您尝试执行一个插入操作,该操作重复了集合中已存在的一个_id字段值,驱动程序将返回一个Error实例并打印以下错误消息

Error: Error { kind: Write(WriteError(WriteError { code: 11000,
code_name: None, message: "E11000 duplicate key error collection:
db.test_coll index: _id_ dup key: { _id: 1 }", details: None })), labels:
{}, wire_version: None, source: None }

在前面的错误消息中,kind字段的值为Write。有关此类错误的更多信息,请参阅本指南中的写入错误类型部分。

并发操作错误可能会清除连接池,中断您的服务器连接。在这种情况下,驱动程序会在Error类型中引发错误,其中kind字段的值为ConnectionPoolCleared。错误消息描述了并发操作失败的原因。

有关如何调整您的连接池以解决此错误的信息,请参阅服务器手册中的调整连接池设置

根据产生错误的环境,驱动程序可能会在错误中添加RetryableWriteError标签,如下所示的错误消息

Error { kind: ConnectionPoolCleared { message: "Connection pool for
localhost:27017 cleared because another operation failed with: Kind:
I/O error: timed out, labels: {}" }, labels: {"RetryableWriteError"},
wire_version: None, source: None }

此标签表示错误是可重试的写入错误,这意味着驱动程序将尝试重试一次。

当驱动程序在执行写操作时遇到错误,它会抛出一个具有 kind 字段值为 WriteError 实例。Write 变体的主体是枚举 WriteFailure,它接受类型为 WriteErrorWriteConcernError 的值。

当您执行写入操作且驱动程序无法满足指定的写入关注时,驱动程序将引发 WriteConcernError 错误。例如,如果您在具有三个节点的副本集上指定 majority 写入关注,则如果写入操作仅传播到一个节点,驱动程序将返回此错误。

有关写入关注的更多信息,请参阅服务器手册中的写入关注

当驱动程序在执行写入操作时遇到与满足写入关注无关的错误时,它将引发 WriteError 错误。由于此错误有多个原因,因此 WriteError 类型包含字段,用于描述写入错误的类型和错误原因。

例如,如果尝试将文档插入违反集合模式验证规则的集合中,驱动程序将引发 WriteError 错误。假设该集合有一个规则,其中 quantity 字段的值必须是 int 类型。如果尝试插入一个其中 quantity 值为 "three" 的文档,驱动程序将打印以下错误消息

Error: Error { kind: Write(WriteError(WriteError { code: 121, code_name:
None, message: "Document failed validation", details:
Some(Document({"failingDocumentId": Int32(1), "details":
Document({"operatorName": String("$jsonSchema"), "title":
String("Numerical Validation"), "schemaRulesNotSatisfied":
Array(...)})})) })), labels: {},
wire_version: None, source: None }

在上面的错误消息中,message 字段描述了错误原因,而 details 字段提供了有关失败操作的具体细节。要解决这个问题,必须修改文档以符合模式验证规则或跳过验证。

要了解有关模式验证的更多信息,请参阅关于模式验证的指南。

返回

连接故障排除