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.
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á
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
}
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
Campo | Descripción |
---|---|
type | Define que el trigger se ejecutará en la base de datos (DATABASE). |
name | Nombre del trigger (shippingLocationUpdater). |
function_name | Nombre de la función que se ejecutará (textShippingUpdate). |
disabled | Indica si el trigger está activo (false significa que está habilitado). |
🔹 Configuración del Trigger (“config”)
Campo | Descripción |
---|---|
service_name | Especifica que el trigger se ejecuta en un cluster de MongoDB Atlas (mongodb-atlas). |
database | Nombre de la base de datos (store). |
collection | Nombre de la colección (orders`). |
operation_types | Lista de eventos que activarán el trigger ([“UPDATE”]). |
unordered | Indica si los eventos deben procesarse en orden (false para ordenados). |
full_document | Si está en true, el evento incluye el documento completo después de la actualización. |
match | Filtro 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.
Get the latest updates and articles straight to your inbox or contact me for any queries.