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 desbordamiento de pilao 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.

El Error El tipo contiene el kind campo, que describe el tipo de error ocurrido. El kind campo tiene el valor de la enumeración ErrorKind. La ErrorKind enumeración tiene variantes para diferentes tipos de errores, entre ellas:

  • 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 e interrumpir la conexión con el servidor. En este caso, el controlador genera un tipo Error cuyo valor del campo kind es ConnectionPoolCleared. El mensaje de error describe el motivo del fallo de la operación concurrente.

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 se puede volver a escribir, lo que significa que el controlador realiza un nuevo intento.

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 WriteConcernError al realizar una operación de escritura y no puede satisfacer la solicitud de escritura especificada. Por ejemplo, si especifica una solicitud de escritura de majority para operaciones en un conjunto de réplicas con tres nodos, el controlador devuelve este error si la operación de escritura se propaga solo 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 controlador genera un error WriteError ante cualquier error que encuentre al realizar una operación de escritura que no esté relacionado con la satisfacción del problema de escritura. Dado que existen diversas causas para este error, el tipo WriteError contiene campos que describen el tipo de error de escritura y su causa.

Por ejemplo, el controlador genera un error WriteError si se intenta insertar un documento en una colección que infringe las reglas de validación del esquema de la colección. Supongamos que la colección tiene una regla donde el valor del campo quantity debe ser de tipo int. Si se intenta insertar un documento donde el valor de quantity es "three", el controlador muestra 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 el motivo del error y el campo details proporciona detalles específicos sobre la operación fallida. Para solucionar este error, debe revisar el documento para que cumpla con las reglas de validación del esquema o bien omitir la validación.

Para obtener más información sobre la validación de esquemas, consulte la guía sobre validación de esquemas.

Volver

Solución de problemas de conexión

En esta página