Pancho Blog

MongoDB triggers

By Francisco Martínez alias Anariak on Feb 3, 2025
MONGO DB TRIGGERS

MongoDB triggers

Para comenzar con esto tenemos que considerar que es una base de datos NOSQL, lo cual no significa que no pueda ser una base de datos sin referencias, NOSQL significa solamente que no usa el standard SQL, lo cual nos abre un abanico de posibilidades a la hora de seleccionar una base de datos.

Bajo esta premisa, MongoDB si bien no se rige por el standard SQL, si puede tener sierto grado de referencias entre las colecciones por ejemplo a la hora de realizar actualizaciones mediante un evento que ocurra en nuestra base de datos, eso quiere decir que si bien tenemos herramientas que nos simplifican este proceso en algunos lenguajes por ejemplo MONGOOSE en NodeJS, a veces no tendremos esto y vamos a tener que hacer que este proceso se realice de manera automatica sin tener que nosotros crear la función de actualización a mano.

Si bien este proceso puede ser engorroso y para algunos desarrolladores puede no ser la mejor opción, ya que de cierta forma delegamos responsabilidad y sale de nuestro poder, SIEMPRE DEPENDERA DE NUESTRO CONTEXTO y si el equipo en que estemos también considera estas prácticas, aunque siempre es mejor proponer algo que no hacerlo.

Que es un Trigger o disparador

En simples casos un tigger es un evento por otro evento, es decir corresponde a un mecanismo de nuestro motor de base de datos, que se activa en respuesta a otro evento producido y declarado con anterioridad, este puede ser producido por ya sea una Inserción, Actualización, Eliminación de algún documento en nuestra colección o tabla si lo llevamos bases de datos relacionales, si quieres saber más sobre esto puedes dirigirte acá

Configurando nuestro trigger

considerando en como fue consebido MongoDB, tenemos que considerar el standard utilizado por este, en este caso, tampoco usaremos una herraamienta como MongoDB atlas, sino que usaremos la terminal para configuración de este, para hacerlo más universal.

{
  "type": "DATABASE",
  "name": "shippingLocationUpdater",
  "function_name": "textShippingUpdate",
  "config": {
    "service_name": "mongodb-atlas",
    "database": "store",
    "collection": "orders",
    "operation_types": ["UPDATE"],
    "unordered": false,
    "full_document": true,
    "match": {}
  },
  "disabled": false
}

📌 Explicación de la Configuración

Este JSON define un trigger de base de datos en MongoDB Atlas que se activa cuando se actualiza un documento en la colección orders dentro de la base de datos store.

🔹 Campos principales

CampoDescripción
typeDefine que el trigger se ejecutará en la base de datos (DATABASE).
nameNombre del trigger (shippingLocationUpdater).
function_nameNombre de la función que se ejecutará (textShippingUpdate).
disabledIndica si el trigger está activo (false significa que está habilitado).

🔹 Configuración del Trigger (“config”)

CampoDescripción
service_nameEspecifica que el trigger se ejecuta en un cluster de MongoDB Atlas (mongodb-atlas).
databaseNombre de la base de datos (store).
collectionNombre de la colección (orders`).
operation_typesLista de eventos que activarán el trigger ([“UPDATE”]).
unorderedIndica si los eventos deben procesarse en orden (false para ordenados).
full_documentSi está en true, el evento incluye el documento completo después de la actualización.
matchFiltro opcional para definir condiciones específicas (vacío significa que se aplica a todas las actualizaciones).

Si queremos ver un ejemplo aplicado para esto usaremos un ejemplo similar al ya contenido en la web oficial de MongoDB el cual puedes revisar Este enlace. En consecuencia seria este el ejemplo

exports = async function(changeEvent) {
    const updatedOrder = changeEvent.fullDocument; // Captura el documento actualizado

    // Extraer datos relevantes
    const orderId = updatedOrder._id;
    const newShippingLocation = updatedOrder.shippingLocation;

    // Registrar en la consola
    console.log(`Pedido ${orderId} actualizado. Nueva ubicación de envío: ${newShippingLocation}`);

    // (Opcional) Enviar notificación o realizar otra acción
    const sendSMS = context.services.get("smsService");
    await sendSMS.send({
        to: updatedOrder.customerPhone,
        message: `Tu pedido ${orderId} ha cambiado de ubicación: ${newShippingLocation}`
    });

    return { success: true };
};

Con esto, ya una vez llamada esta funcion, el trigger se dispararia para poder realizar las tareas correspondientes.

Subscribe to my Future Newsletters

Get the latest updates and articles straight to your inbox or contact me for any queries.

© Copyright 2025 by Anariak Blog. Built with ♥ by CreativeDesignsGuru.