Docs Menu
Docs Home
/ /

Operaciones compuestas

La mayoría de las solicitudes de base de datos leen o escriben datos en ella. Sin embargo, en algunos casos, puede requerirse una sola operación de lectura y escritura.

Las operaciones compuestas combinan operaciones de lectura y escritura en una sola instrucción atómica, por lo que no hay posibilidad de que los datos cambien entre una lectura y una escritura posterior.

Si ejecutas cada operación por separado, otra solicitud puede alterar los datos entre las operaciones de lectura y guardar. Estos cambios en los datos pueden no impedir que tu operación tenga éxito, pero pueden dificultar la gestión de errores. Cuando tu aplicación gestiona posibles errores en cualquier etapa del proceso, puede volverse frágil y difícil de probar.

El controlador Node.js proporciona los siguientes métodos para realizar operaciones compuestas:

  • buscarUnoYEliminar()

  • buscarUnoYActualizar()

  • buscarUnoYReemplazar()

Estos métodos aceptan un opcional options objeto con configurable Opcionesde clasificación y proyección.

También puede includeResultMetadata configurar la opción para especificar el tipo de retorno de cada uno de estos métodos. Para obtener más información sobre esta opción, consulte la sección "Opción includeResultMetadata" de esta guía.

Los métodos findOneAndUpdate() y findOneAndDelete() toman la configuración returnDocument, que especifica si el método devuelve la versión anterior o posterior a la actualización del documento modificado.

La opción includeResultMetadata determina el tipo de retorno de los métodos compuestos.

Esta configuración tiene como valor predeterminado false, lo que significa que cada método devuelve el documento coincidente. Si no se encuentra ningún documento coincidente, cada método devuelve null. Si se establece includeResultMetadata en true, el método devuelve un tipo ModifyResult que contiene el documento y los metadatos encontrados.

Supongamos que una colección contiene sólo el siguiente documento:

{ _id: 1, x: "on" }

La siguiente tabla muestra cómo el valor de la opción includeResultMetadata cambia el tipo de retorno del método findOneAndDelete():

Valor de la opción
Sintaxis y salida

Por defecto: false

Documento coincidente

await coll.findOneAndDelete({ x: "on" });
{ _id: 1, x: 'on' }

No hay ningún documento coincidente

await coll.findOneAndDelete({ x: "off" });
null

true

await coll.findOneAndDelete({ x: "on" }, { includeResultMetadata: true });
{ lastErrorObject: { n: 1 }, value: { _id: 1, x: 'on' }, ok: 1, ... }

Volver

Operaciones de escritura masiva

En esta página