Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Manejo de errores de operación

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

  • Página deproblemas y ayuda para obtener información sobre cómo informar errores, contribuir al controlador y encontrar más recursos

  • El MongoDB Etiqueta de Stack Overflowo la comunidad MongoDB Reddit para preguntas, debates o soporte técnico general

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étodo

  • Authentication: el controlador encontró un error durante la autenticación

  • ServerSelection: el cliente no pudo seleccionar un servidor para la operación

  • Write:se produjo un error durante una operación de escritura

  • Transaction: 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.

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.

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.

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.

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.

Volver

Solución de problemas de conexión

En esta página