Overview
Esta página describe los errores que podrías encontrar al usar el controlador Rust de MongoDB para realizar operaciones en MongoDB. Una vez que entiendas los tipos de errores de operación que el driver genera, puedes tomar las acciones adecuadas para gestionarlos o corregir el código que causa los errores.
Nota
Esta página solo aborda la gestión de errores de operación. Si encuentra algún otro problema con MongoDB o el controlador, visite los siguientes recursos:
Resolución de problemas de conexión para posibles soluciones a los problemas que puedas encontrar al conectar a una implementación de MongoDB
Página Problemas y ayuda para información sobre cómo reportar errores, contribuir al driver y encontrar más recursos.
El MongoDB Etiqueta de Stack Overflow o en la Community de Reddit de MongoDB 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: proporcionaste 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ónWriteSe produjo un error durante una operación de guardarTransaction: 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 campo kind es Write. Para obtener más información sobre este tipo de error, consulte la sección Tipos de errores de guardado 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 driver podría añadir 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.
Guardar Tipos de errores
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.