Overview
Esta página describe los errores que pueden surgir al usar el controlador Rust de MongoDB para realizar operaciones de MongoDB. Una vez que comprenda los tipos de errores de operación que genera el controlador, podrá tomar las medidas necesarias para gestionarlos o corregir el código que los causa.
Nota
Esta página aborda únicamente la gestión de errores de operación. Si tiene algún otro problema con MongoDB o el controlador, visite los siguientes recursos:
Solución de problemas de conexión para posibles soluciones a los problemas que pueda encontrar al conectarse a una implementación de MongoDB
El MongoDB Etiqueta de Stack Overflowo la comunidad MongoDB Reddit para preguntas, debates o soporte técnico general
Tipo de error
Si el controlador encuentra un error al realizar una operación, devuelve un error del tipo Error.
La Error type contiene el campo kind, que describe el tipo de error que ha ocurrido. El campo kind tiene un valor de enumeración ErrorKind. El enum ErrorKind tiene variantes para diferentes tipos de errores, incluidos los siguientes:
InvalidArgument:proporcionó un argumento no válido a un métodoAuthentication: el controlador encontró un error durante la autenticaciónServerSelection: el cliente no pudo seleccionar un servidor para la operaciónWrite:se produjo un error durante una operación de escrituraTransaction: Ocurrió un error durante una transacción
Por ejemplo, si intentas realizar una operación de inserción que duplica el valor de campo _id que ya está en la colección, el controlador devuelve una instancia Error e imprime el siguiente mensaje de 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 }
En el mensaje de error anterior, el valor del kind campo Write es. Para obtener más información sobre este tipo de error, consulte la sección "Tipos de errores de escritura" de esta guía.
Errores de conexión
Un error de operación concurrente podría borrar el pool de conexiones, interrumpiendo tu conexión con el servidor. En esta situación, el driver genera un tipo Error en el que el valor del campo kind es ConnectionPoolCleared. El mensaje de error describe la razón por la que la operación concurrente falló.
Para aprender a ajustar tu pool de conexiones para resolver este error, consulta Configuración del ajuste de tu pool de conexiones en el manual del servidor.
Dependiendo de las circunstancias que produzcan el error, el controlador podría agregar una etiqueta RetryableWriteError al error, como se muestra en el siguiente mensaje de error:
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 }
Esta etiqueta indica que el error puede ser reintentado en guardado. Esto significa que el driver realiza un intento de reintento.
Tipos de errores de escritura
Cuando el driver experimenta un error al realizar una operación de guardado, genera una instancia de Error con un valor de campo kind de Write. El cuerpo de la variante Write es el enum WriteFailure, que toma un valor de tipo WriteError o WriteConcernError.
Error de nivel de confirmación de escritura (write concern)
El controlador genera un error de WriteConcernError cuando realizas una operación de escritura y el controlador no puede cumplir con el nivel de confirmación de escritura (write concern) especificado. Por ejemplo, si especificas un nivel de confirmación de escritura (write concern) de majority para las operaciones en un set de réplicas con tres nodos, el driver devolverá este error si la operación de escritura solo se propaga a un nodo.
Para obtener más información sobre los niveles de confirmación de escritura (write concerns), consulta Nivel de confirmación de escritura (write concern) en el manual del servidor.
Error de guardar
El driver genera un error WriteError para cualquier error que encuentre al realizar una operación de escritura que no esté relacionado con la satisfacción del nivel de confirmación de escritura (write concern). Debido a que existen muchas causas para este error, el tipo WriteError contiene campos que describen el tipo de error de escritura y el motivo del error.
Por ejemplo, el driver genera un error WriteError si intentas insertar un documento en una colección que infringe las reglas de validación de esquema de la colección. Supón que la colección tiene una regla donde el valor del campo quantity debe ser de tipo int. Si intentas insertar un documento donde el valor de quantity es "three", el driver imprime el siguiente mensaje de error:
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 }
En el mensaje de error anterior, el campo message describe la razón del error, y el campo details proporciona detalles específicos sobre la operación que falla. Para solucionar este error, debes modificar el documento para cumplir las reglas de validación del esquema o saltarte la validación.
Para aprender más sobre la validación de esquemas, consulta la guía sobre Validación de esquemas.