Operation Error Handling
Overview
This page describes errors you might encounter when using the MongoDB Rust Driver to perform MongoDB operations. Once you understand the types of operation errors that the driver raises, you can take appropriate actions to either handle them or correct the error-causing code.
Note
This page addresses only operation error handling. If you encounter any other issues with MongoDB or the driver, visit the following resources:
Connection Troubleshooting for potential solutions to issues you might encounter when connecting to a MongoDB deployment
Issues & Help page for information about reporting bugs, contributing to the driver, and finding more resources
MongoDB Community Forums for questions, discussions, or general technical support
Error Type
If the driver encounters an error while performing an operation, it returns an error of the Error type.
The Error
type contains the kind
field, which describes the type of
error that occurred. The kind
field has a value of enum ErrorKind. The ErrorKind
enum has
variants for different kinds of errors, including the following:
InvalidArgument
: you provided an invalid argument to a methodAuthentication
: the driver encountered an error during authenticationServerSelection
: the client couldn't select a server for the operationWrite
: an error occurred during a write operationTransaction
: an error occurred during a transaction
For example, if you attempt to perform an insert operation that
duplicates an _id
field value that is already in the collection,
the driver returns an Error
instance and prints the following error
message:
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 }
In the preceding error message, the value of the kind
field is
Write
. To learn more about this type of error, see the Write
Error Types section of this guide.
Connection Errors
A concurrent operation error might clear the connection pool,
interrupting your connection to the server. In this
situation, the driver raises an Error
type in which the value of the
kind
field is ConnectionPoolCleared
. The error message describes
the reason that the concurrent operation failed.
To learn how to adjust your connection pool to address this error, see Tuning Your Connection Pool Settings in the Server manual.
Depending on the circumstances that produce the error, the driver might
add a RetryableWriteError
label to the error, as shown in the
following error message:
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 }
This label indicates that the error is write-retryable, which means that the driver makes one retry attempt.
Write Error Types
When the driver experiences an error while performing a write operation,
it raises an Error
instance with a kind
field value of Write
.
The body of the Write
variant is the enum WriteFailure, which
takes a value of type WriteError or
WriteConcernError.
Write Concern Error
The driver raises a WriteConcernError
error when you perform a write
operation and the driver cannot satisfy the specified write concern. For
example, if you specify a write concern of majority
for
operations on a replica set with three nodes, the driver returns
this error if the write operation propagates only to one node.
To learn more about write concerns, see Write Concern in the Server manual.
Write Error
The driver raises a WriteError
error for any errors that it
encounters when performing a write operation that are not related to
satisfying the write concern. Because there are many causes for this
error, the WriteError
type contains fields that describe the type of
write error and reason for the error.
For example, the driver raises a WriteError
error if you attempt to
insert a document into a collection that violates the collection's
schema validation rules. Suppose the collection has a rule where the
value of the quantity
field must be an int
type. If you
attempt to insert a document where the value of quantity
is
"three"
, the driver prints the following error message:
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 }
In the preceding error message, the message
field describes the
reason for the error, and the details
field provides specific
details about the failing operation. To address this error, you must
either revise the document to adhere to the schema validation rules or
bypass validation.
To learn more about schema validation, see the guide on Schema Validation.