Docs Menu
Docs Home
/ /

Activadores de base de datos

Los activadores de base de datos permiten ejecutar lógica del lado del servidor cada vez que ocurre un cambio en la base de datos en un clúster vinculado de MongoDB Atlas. Se pueden configurar Triggers en colecciones individuales, bases de datos completas y en todo el clúster.

A diferencia de los desencadenadores de datos SQL, que se ejecutan en el servidor de base de datos, los desencadenadores de base de datos Atlas se ejecutan en una capa de cómputo sin servidor que escala independientemente del servidor de base de datos. Los desencadenadores llaman automáticamente a Atlas. Funciones y puede reenviar eventos a controladores externos a través de Puentede eventos de AWS.

Utilice activadores de base de datos para implementar interacciones de datos basadas en eventos. Por ejemplo, puede actualizar automáticamente la información de un documento cuando cambia un documento relacionado o enviar una solicitud a un servicio externo cada vez que se inserta un nuevo documento.

Los activadores de bases de datos utilizan MongoDB Flujos de cambios para monitorear cambios en tiempo real en una colección. Un flujo de cambios es una serie de eventos de base de datos que describen una operación en un documento de la colección. La aplicación abre un único flujo de cambios para cada colección con al menos un disparador habilitado. Si habilita varios disparadores para una colección, todos comparten el mismo flujo de cambios.

Importante

Limitaciones del flujo de cambios

Existen límites en el número total de flujos de cambios que se pueden abrir en un clúster, según su tamaño. Para obtener más información, consulte las limitaciones de los flujos de cambios.

Además, no se puede definir un disparador de base de datos en un clúster Flex o en una instancia de base de datos federada porque no admiten flujos de cambio.

Usted controla qué operaciones activan un disparador y qué sucede cuando lo hace. Por ejemplo, puede ejecutar una función cada vez que se actualiza un campo específico de un documento. La función puede acceder a todo el evento de cambio, por lo que siempre sabrá qué ha cambiado. También puede pasar el evento de cambio a AWS EventBridge para gestionarlo fuera de Atlas.

Los activadores admiten expresiones $match para filtrar eventos de cambio y expresiones $project para limitar los datos incluidos en cada evento.

Advertencia

En los disparadores a nivel de implementación y base de datos, es posible configurarlos de forma que provoquen la activación de otros disparadores, lo que genera recursión. Por ejemplo, un disparador a nivel de base de datos que escribe en una colección dentro de la misma base de datos, o un registrador o reenviador de registros a nivel de clúster que escribe registros en otra base de datos del mismo clúster.

Para crear y administrar activadores, debe tener Project Trigger Manager o acceso superior.

Puede crear un disparador de base de datos desde la interfaz de usuario de Atlas o con la CLI de App Services.

  1. En Atlas, vaya a la Triggers página.

    1. Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.

    2. Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.

    3. En la barra lateral, haz clic en Triggers en la sección Streaming Data.

    Se muestra la página Desencadenantes.

  2. Haga clic en Add Trigger para abrir la página de configuración del disparador.

  3. Seleccione el tipo de disparador Database.

  4. Configure el disparador y luego haga clic en Save.

    Campo
    Configuración

    Trigger Type

    Database or Scheduled

    Watch Against

    Collection, Database, o Deployment.

    Cluster Name

    Nombre que identifica el clúster.

    Database Name

    Nombre que identifica la base de datos.

    Collection Name

    Nombre que identifica la colección.

    Operation Type

    Operación que hace que se dispare el gatillo.

  1. Autenticar un usuario de MongoDB Atlas:

    Utilice su clave API de administración de MongoDB Atlas para iniciar sesión en la CLI de App Services:

    appservices login --api-key="<API KEY>" --private-api-key="<PRIVATE KEY>"
  2. Extraiga los últimos archivos de configuración de su aplicación:

    Ejecute el siguiente comando para obtener una copia local de sus archivos de configuración:

    appservices pull --remote=<App ID>

    De forma predeterminada, el comando extrae los archivos al directorio de trabajo actual. Puede especificar una ruta de directorio con el indicador opcional --local.

  3. Agregue un archivo de configuración de activación de base de datos al triggers subdirectorio en los archivos de su aplicación local.

  4. Implemente sus cambios:

    Ejecute el siguiente comando para implementar sus cambios:

    appservices push

Nota

Atlas no impone nombres de archivo específicos para los archivos de configuración de los disparadores. Sin embargo, una vez importados, Atlas renombrará cada archivo de configuración para que coincida con el nombre del disparador que define.

Los activadores de base de datos tienen las siguientes opciones de configuración:

En la sección Trigger Details, puede seleccionar el alcance que desea que el disparador Watch Against alcance, según el nivel de granularidad deseado. Sus opciones son:

  • Collection, cuando se produce un cambio en una colección específica

  • Database, cuando se produce un cambio en cualquier colección de una base de datos específica

  • Deployment, cuando se producen cambios de implementación en un clúster específico.

    Si selecciona el tipo de origen Implementación,no se supervisan los cambios en las siguientes bases de datos:

    • Las bases de datos de administración admin, local y config

    • Las bases de datos de sincronización __realm_sync y __realm_sync_<app_id>

    Importante

    El tipo de fuente de nivel de implementación solo está disponible en niveles dedicados.

Las opciones adicionales varían según el tipo de fuente que utilice. La siguiente tabla describe estas opciones.

Tipo de fuente
opciones

Collection


  • Cluster NameEl nombre del clúster MongoDB con el que está asociado el disparador.

  • Database NameLa base de datos MongoDB que contiene la colección vigilada.

  • Collection NameLa colección de MongoDB que se va a supervisar. Opcional. Si deja esta opción en blanco, el tipo de origen cambia a "Base de datos".

  • Operation TypeLos tipos de operación que activan el disparador. Seleccione los tipos de operación a los que desea que responda el disparador. Las opciones incluyen:

    • Insert

    • Update

    • Reemplaza

    • Borrar

    Nota: Las operaciones de actualización ejecutadas desde MongoDB Compass o MongoDB Atlas Data Explorer reemplazan completamente el documento anterior. Por lo tanto, las operaciones de actualización de estos clientes generan Replace eventos de cambio en lugar Update de.

  • Full Document. Si está habilitado, losUpdate eventos de cambio incluyen la última versión mayoritariamente confirmada del documento modificado después de que se aplicó el cambio en el fullDocument campo.

    Nota: Independientemente de esta configuración, loseventos Insertar y Reemplazar siempre incluyen el fullDocument campo. Los eventos Eliminar nunca incluyen el fullDocument campo.

  • Document PreimageCuando está habilitado, los eventos de cambio incluyen una copia del documento modificado inmediatamente antes de la aplicación del cambio en el fullDocumentBeforeChange campo. Esto tiene consecuencias para el rendimiento. Todos los eventos de cambio, excepto,Insert incluyen la preimagen del documento.

Database


  • Cluster NameEl nombre del clúster MongoDB con el que está asociado el disparador.

  • Database NameLa base de datos MongoDB que se va a supervisar. Opcional. Si deja esta opción en blanco, el tipo de origen cambia a Deployment a menos que esté en un nivel compartido; en cuyo caso, Atlas no le permitirá guardar el disparador.

  • Operation TypeLos tipos de operación que activan el disparador. Seleccione los tipos de operación a los que desea que responda el disparador. Las opciones incluyen:

    • Crear colección

    • Modificar colección

    • Cambiar el nombre de la colección

    • Colección Drop

    • shardCollection

    • Colección Reshard

    • Refinar clave de fragmento de colección

    Nota: Las operaciones de actualización ejecutadas desde MongoDB Compass o MongoDB Atlas Data Explorer reemplazan completamente el documento anterior. Por lo tanto, las operaciones de actualización de estos clientes generarán Replace eventos de cambio en lugar Update de.

  • Full Document. Si está habilitado, losUpdate eventos de cambio incluyen la última versión mayoritariamente confirmada del documento modificado después de que se aplicó el cambio en el fullDocument campo.

    Nota: Independientemente de esta configuración, loseventos Insertar y Reemplazar siempre incluyen el fullDocument campo. Los eventos Eliminar nunca incluyen el fullDocument campo.

  • Document PreimageAl habilitarse, los eventos de cambio incluyen una copia del documento modificado inmediatamente anterior a la aplicación del cambio en el fullDocumentBeforeChange campo. Esto tiene consecuencias para el rendimiento. Todos los eventos de cambio, excepto los,Insert incluyen la preimagen del documento. Se deshabilita para las fuentes de base de datos e implementación para limitar las inspecciones innecesarias en el clúster al crearse una nueva colección.

Deployment


  • Cluster NameEl nombre del clúster MongoDB con el que está asociado el disparador.

  • Operation TypeLos tipos de operaciones que ocurren en el clúster y que hacen que el disparador se active. Seleccione los tipos de operaciones a los que desea que responda el disparador. Las opciones incluyen:

    • Descartar base de datos

  • Full Document. Si está habilitado, losUpdate eventos de cambio incluyen la última versión mayoritariamente confirmada del documento modificado después de que se aplicó el cambio en el fullDocument campo.

    Nota: Independientemente de esta configuración, loseventos Insertar y Reemplazar siempre incluyen el fullDocument campo. Los eventos Eliminar nunca incluyen el fullDocument campo.

  • Document PreimageAl habilitarse, los eventos de cambio incluyen una copia del documento modificado inmediatamente anterior a la aplicación del cambio en el fullDocumentBeforeChange campo. Esto tiene consecuencias para el rendimiento. Todos los eventos de cambio, excepto los,Insert incluyen la preimagen del documento. Se deshabilita para las fuentes de base de datos e implementación para limitar las inspecciones innecesarias en el clúster al crearse una nueva colección.

Tip

Preimágenes y optimización del rendimiento

Las preimágenes requieren almacenamiento adicional, lo que puede afectar el rendimiento. Si no las usa en una colección, desactívelas. Para obtener más información, consulte Desactivar preimágenes a nivel de colección.

Las preimágenes de documentos son compatibles con clústeres Atlas no fragmentados que ejecutan MongoDB 4.4o superior, y con clústeres Atlas fragmentados que ejecutan MongoDB 5.3 y versiones posteriores. Puede actualizar un clúster no fragmentado (con preimágenes) a un clúster fragmentado, siempre que el clúster ejecute 5.3 o versiones posteriores.

Campo
Descripción

Auto-Resume

Si está activado, cuando el token de reanudación de este activador no se encuentra en el oplog del clúster, el activador reanuda automáticamente el procesamiento de eventos en el siguiente evento relevante del flujo de cambios. Todos los eventos de flujo de cambios desde que el activador fue suspendido hasta que se reanuda su ejecución, no causarán que el activador se active para esos eventos.

Event Ordering

Si está habilitado, los eventos de activación se procesan en el orden en que ocurren. Si está deshabilitado, los eventos se pueden procesar en paralelo, lo cual es más rápido cuando ocurren muchos eventos simultáneamente.

Si la ordenación de eventos está habilitada, este disparador se ejecutará secuencialmente según las marcas de tiempo de los eventos de cambio. Si está deshabilitada, este disparador se ejecutará de forma independiente.

Consejo: para mejorar el rendimiento de los activadores que responden a operaciones de base de datos masivas, deshabilite el orden de eventos.

Skip Events On Re-Enable

Deshabilitado por defecto. Si está habilitado, no se procesarán los eventos de cambio que se hayan producido mientras este disparador estaba deshabilitado.

Dentro de la sección Event Type, eliges la acción que se tomará cuando se active el activador. Puede elegir ejecutar una Función o usar AWS EventBridge.

Dentro de la Advanced sección, están disponibles las siguientes opciones de configuración opcionales:

Campo
Descripción

Project Expression

Una expresión $project que selecciona un subconjunto de campos de cada evento en el flujo de cambios. Puede usarla para optimizar la ejecución del disparador.

La expresión es un objeto que asigna el nombre de los campos del evento de cambio a 0, que excluye el campo, o a 1, que lo incluye. Una expresión puede tener valores de 0 o 1, pero no ambos a la vez. Esto divide las proyecciones en dos categorías: inclusivas y exclusivas:

  • Una expresión de proyecto inclusiva especifica los campos que se incluirán en cada documento de evento de cambio. La expresión es un objeto que asigna el nombre de los campos a un 1 valor. Si no se incluye un campo, este no se incluirá en el evento de cambio proyectado.

    La siguiente proyección incluye solo los campos _id y fullDocument:

    {
    _id: 1,
    fullDocument: 1
    }
  • Una expresión de proyecto exclusiva especifica los campos que se excluirán de cada documento de evento de cambio. La expresión es un objeto que asigna el nombre de los campos a incluir a 0 un. Si no se excluye un campo, este se incluye en el evento de cambio proyectado.

    La siguiente proyección excluye los campos _id y fullDocument:

    {
    _id: 0,
    fullDocument: 0
    }

    No se puede excluir el campo operation_type con una proyección. Esto garantiza que el disparador siempre pueda comprobar si debe ejecutarse para el tipo de operación de un evento determinado.

Match Expression

Un documento de expresión $match que Atlas utiliza para filtrar los eventos de cambio que activan el disparador. El disparador evalúa todos los objetos de evento de cambio que recibe con esta expresión de coincidencia y solo se ejecuta si la expresión da como true resultado para un evento de cambio determinado.

MongoDB realiza una coincidencia de igualdad completa para los documentos incrustados en una expresión de coincidencia. Si desea que un campo específico coincida con un documento incrustado, consulte el campo directamente mediante la notación de puntos. Para más información, consulte Consulta en documentos incrustados en el manual del servidor MongoDB.

Para optimizar el rendimiento, limite el número de campos que procesa el disparador mediante una expresión $match. Más información.

Maximum Throughput

Si la fuente de datos vinculada es un servidor dedicado (nivel M10+), puede aumentar el rendimiento máximo más allá de 10 los,000 procesos simultáneos predeterminados.

Importante: para habilitar el máximo rendimiento, debe deshabilitar el ordenamiento de eventos.

Antes de aumentar el rendimiento máximo, considere si uno o más de sus activadores están llamando a una API externa con límite de velocidad. Aumentar la velocidad de los activadores podría resultar en la superación de dichos límites.

Aumentar el rendimiento también puede agregar una mayor carga de trabajo, lo que afecta el rendimiento general del clúster.

Los eventos de cambio de base de datos representan cambios individuales en una colección específica de su clúster MongoDB Atlas vinculado.

Cada evento de base de datos tiene el mismo tipo de operación y estructura que el objeto de evento de cambio emitido por el flujo de cambios subyacente. Los eventos de cambio tienen los siguientes tipos de operación:

Tipo de operación
Descripción

Insertar documento (todos los tipos de activadores)

Representa un nuevo documento agregado a la colección.

Actualizar documento (todos los tipos de activadores)

Representa un cambio en un documento existente en la colección.

Eliminar documento (todos los tipos de activadores)

Representa un documento eliminado de la colección.

Reemplazar documento (todos los tipos de activadores)

Representa un nuevo documento que reemplazó un documento de la colección.

Crear colección (solo tipos de implementación y activador de base de datos)

Representa la creación de una nueva colección.

Modificar colección (solo tipos de desencadenadores de implementación y base de datos)

Representa la colección de modificación.

Cambiar el nombre de la colección (solo tipos de desencadenadores de implementación y base de datos)

Representa una colección que está siendo renombrada.

Recopilación de caídas (solo tipos de desencadenadores de implementación y base de datos)

Representa una colección que se está eliminando.

Recopilación de fragmentos (solo tipos de desencadenadores de implementación y base de datos)

Representa una colección que cambia de no fragmentada a fragmentada.

Recopilación de fragmentos (solo tipos de desencadenadores de implementación y base de datos)

Representa un cambio en el particionado de una colección.

Refina la clave de partición de la colección (solo para tipos de activadores de base de datos e implementación)

Representa un cambio en la clave de fragmento de una colección.

Crear índices (solo tipos de desencadenadores de implementación y de base de datos)

Representa la creación de un nuevo índice.

Índices de eliminación (solo tipos de desencadenadores de implementación y base de datos)

Representa un índice que se está eliminando.

Base de datos de Drop (solo tipo de activador de implementación)

Representa una base de datos que se está eliminando.

Los objetos de evento de cambio de base de datos tienen la siguiente forma general:

{
_id : <ObjectId>,
"operationType": <string>,
"fullDocument": <document>,
"fullDocumentBeforeChange": <document>,
"ns": {
"db" : <string>,
"coll" : <string>
},
"documentKey": {
"_id": <ObjectId>
},
"updateDescription": <document>,
"clusterTime": <Timestamp>
}

Una tienda online quiere notificar a sus clientes cada vez que uno de sus pedidos cambia de ubicación. Registra cada pedido en la colección store.orders como un documento similar al siguiente:

{
_id: ObjectId("59cf1860a95168b8f685e378"),
customerId: ObjectId("59cf17e1a95168b8f685e377"),
orderDate: ISODate("2018-06-26T16:20:42.313Z"),
shipDate: ISODate("2018-06-27T08:20:23.311Z"),
orderContents: [
{ qty: 1, name: "Earl Grey Tea Bags - 100ct", price: NumberDecimal("10.99") }
],
shippingLocation: [
{ location: "Memphis", time: ISODate("2018-06-27T18:22:33.243Z") },
]
}

Para automatizar este proceso, la tienda crea un disparador de base de datos que detecta Update eventos de cambio en la store.orders colección. Cuando el disparador detecta un Update evento, pasa el objeto de evento de cambio a su función asociada,. textShippingUpdate Esta función comprueba si el evento de cambio ha cambiado el shippingLocation campo y, si se actualizó, envía un mensaje de texto al cliente con la nueva ubicación del pedido.

Campo
Configuración

Trigger Type

Database

Watch Against

Collection

Cluster Name

Cluster0

Database Name

store

Collection Name

orders

Operation Type

Update Document

Configuración del disparador
{
"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
}
textShippingUpdate
exports = async function (changeEvent) {
// Destructure out fields from the change stream event object
const { updateDescription, fullDocument } = changeEvent;
// Check if the shippingLocation field was updated
const updatedFields = Object.keys(updateDescription.updatedFields);
const isNewLocation = updatedFields.some(field =>
field.match(/shippingLocation/)
);
// If the location changed, text the customer the updated location.
if (isNewLocation) {
const { customerId, shippingLocation } = fullDocument;
const mongodb = context.services.get("mongodb-atlas");
const customers = mongodb.db("store").collection("customers");
const { location } = shippingLocation.pop();
const customer = await customers.findOne({ _id: customerId });
const twilio = require('twilio')(
// Your Account SID and Auth Token from the Twilio console:
context.values.get("TwilioAccountSID"),
context.values.get("TwilioAuthToken"),
);
await twilio.messages.create({
To: customer.phoneNumber,
From: context.values.get("ourPhoneNumber"),
Body: `Your order has moved! The new location is ${location}.`
})
}
};

Los disparadores de base de datos pueden entrar en estado suspendido en respuesta a un evento que impide que el flujo de cambios del disparador continúe. Los eventos que pueden suspender un disparador incluyen:

  • invalidar eventos dropDatabaserenameCollectioncomo, o aquellos causados ​​por una interrupción de la red.

  • el token de reanudación requerido para reanudar el flujo de cambios ya no está en el oplogdel clúster. Los registros de la aplicación se refieren a esto como un error ChangeStreamHistoryLost.

  • Una etapa $match filtra una entrada del registro de operaciones que contiene el token de reanudación. El siguiente evento coincidente no tendrá el token de reanudación, por lo que el disparador no podrá reanudarse.

En caso de que un disparador se suspenda o falle, Atlas envía un correo electrónico al propietario del proyecto para alertarlo sobre el problema.

Puede configurar un disparador para que se reanude automáticamente si se suspendió porque el token de reanudación ya no está en el registro de operaciones. El disparador no procesa ningún evento de flujo de cambios perdido entre la pérdida del token de reanudación y la finalización del proceso de reanudación.

Al crear o actualizar un disparador de base de datos en la interfaz de usuario de Atlas:

  1. Navegue a la página de configuración del disparador que desea reanudar automáticamente si se suspende.

  2. En la sección Advanced (Optional), seleccione Auto-Resume Triggers.

  3. Guarda e implementa los cambios.

Al reanudar manualmente un disparador suspendido, la aplicación intenta reanudarlo en el siguiente evento de flujo de cambios después de que se detuviera. Si el token de reanudación ya no está en el registro de operaciones del clúster, el disparador debe iniciarse sin un token de reanudación. Esto significa que el disparador comienza a escuchar nuevos eventos, pero no procesa los eventos pasados ​​que se hayan perdido.

Puede ajustar el tamaño del registro de operaciones para conservar el token de reanudación durante más tiempo después de una suspensión escalando su clúster de |service|. Mantenga un tamaño del registro de operaciones varias veces mayor que el rendimiento máximo del registro de operaciones de su clúster (GB/hora) para reducir el riesgo de que el token de reanudación de un disparador suspendido se elimine del registro de operaciones antes de que este se ejecute. Consulte el rendimiento del registro de operaciones de su clúster en el gráfico GB/hora del registro de operaciones en las métricas del clúster de |service|.

Puede reiniciar un disparador suspendido desde la interfaz de usuario de Atlas o con la CLI de App Services.

1
  1. Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.

  2. Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.

  3. En la barra lateral, haz clic en Triggers en la sección Streaming Data.

Se muestra la página Desencadenantes.

2

En la página Triggers, busque el disparador que desea deshabilitar en la lista de disparadores. Atlas marca los disparadores suspendidos con un Status o un Suspended.

3

Haga clic Restart en en la Actions columna del disparador. Puede reiniciar el disparador con un token de reanudación de flujo de cambios o abrir un nuevo flujo de cambios.

Indique si desea utilizar o no un token de currículum y luego haga clic en Resume Database Trigger.

Nota: Si usa un token de reanudación, Atlas intenta reanudar el flujo de cambios subyacente del disparador en el evento inmediatamente posterior al último evento de cambio que procesó. Si lo logra, el disparador procesa cualquier evento ocurrido mientras estaba suspendido. Si no usa un token de reanudación, el disparador comienza a detectar nuevos eventos, pero no se activará para ninguno ocurrido mientras estaba suspendido.

El modal de activación de la base de datos de currículum en la interfaz de usuario
1

Utilice su clave API de administración de MongoDB Atlas para iniciar sesión en la CLI de App Services:

appservices login --api-key="<API KEY>" --private-api-key="<PRIVATE KEY>"
2

Ejecute el siguiente comando para obtener una copia local de sus archivos de configuración:

appservices pull --remote=<App ID>

De forma predeterminada, el comando extrae los archivos al directorio de trabajo actual. Puede especificar una ruta de directorio con el indicador opcional --local.

3

Si exportó una nueva copia de su aplicación, esta ya debería incluir un archivo de configuración actualizado para el disparador suspendido. Puede confirmar la existencia del archivo de configuración buscando en el /triggers directorio un archivo de configuración del disparador con el mismo nombre que este.

4

Después de verificar que el archivo de configuración del activador existe, envía la configuración a tu aplicación. Los servicios de aplicación intentan reiniciar automáticamente cualquier activador suspendido incluido en la implementación.

appservices push

La lista de activadores en la interfaz de usuario de Atlas muestra tres marcas de tiempo:

Última modificación

Este es el momento en el que se creó o modificó por última vez el disparador.

Último latido del corazón

Atlas registra la última vez que se ejecutó un disparador. Si el disparador no envía ningún evento, el servidor envía un latido para garantizar que su token de reanudación se mantenga actualizado. El evento más reciente se muestra como Latest Heartbeat.

Hora del último clúster procesado

Atlas también registra el Last Cluster Time Processed, que corresponde a la última vez que el flujo de cambios que respalda un disparador emitió un evento. Será anterior al Latest Heartbeat si no ha habido eventos desde el latido más reciente.

Considere deshabilitar el orden de eventos si su disparador se activa en una colección que recibe ráfagas cortas de eventos (por ejemplo, insertar datos como parte de un trabajo por lotes diario).

Los disparadores ordenados esperan para ejecutar una función para un evento específico hasta que las funciones de eventos anteriores hayan terminado de ejecutarse. En consecuencia, su velocidad está limitada por el tiempo de ejecución de cada función de disparador secuencial. Esto puede causar un retraso significativo entre la aparición del evento de base de datos en el flujo de cambios y la activación del disparador. En casos extremos, los eventos de base de datos pueden desaparecer del registro de operaciones antes de que un disparador ordenado de larga duración los procese.

Los activadores no ordenados ejecutan funciones en paralelo si es posible, lo que puede ser significativamente más rápido (dependiendo de su caso de uso), pero no garantiza que se produzcan múltiples ejecuciones de una función activadora en el orden del evento.

Las preimágenes de documento requieren que el clúster registre datos adicionales sobre cada operación en una colección. Una vez habilitadas las preimágenes para cualquier disparador de una colección, el clúster almacena preimágenes para cada operación en la colección.

El espacio de almacenamiento adicional y la sobrecarga computacional pueden degradar el rendimiento de Trigger dependiendo de la configuración de su clúster.

Para evitar la sobrecarga de almacenamiento y procesamiento de las preimágenes, debe deshabilitarlas para toda la colección subyacente de MongoDB. Esta configuración es independiente de la configuración de preimágenes de cualquier disparador individual.

Si deshabilita las preimágenes a nivel de colección, ningún disparador activo de esa colección podrá usarlas. Sin embargo, si elimina o deshabilita todos los disparadores de preimágenes de una colección, también podrá deshabilitarlas.

Para saber cómo hacerlo,consulte Deshabilitar preimágenes para una colección.

Puede limitar el número de invocaciones del disparador especificando una expresión $match en el Match Expression campo. Atlas evalúa la expresión de coincidencia con el documento del evento de cambio e invoca el disparador solo si la expresión se evalúa como verdadera para el evento de cambio dado.

La expresión de coincidencia es un documento JSON que especifica las condiciones de consulta utilizando la sintaxis de consulta de lectura de MongoDB.

Recomendamos usar expresiones de coincidencia solo cuando el volumen de eventos de activación represente un problema de rendimiento considerable. Hasta entonces, reciba todos los eventos y gestione cada uno individualmente en el código de la función de activación.

La forma exacta del documento de evento de cambio depende del evento que provocó la activación del disparador. Para más detalles, consulte la referencia de cada tipo de evento:

La siguiente expresión de coincidencia permite que el disparador se active solo si el objeto de evento de cambio especifica que el campo status en un documento cambió.

updateDescription es un campo del objeto de evento de actualización.

{
"updateDescription.updatedFields.status": {
"$exists": true
}
}

La siguiente expresión de coincidencia permite que el disparador se active solo cuando el needsTriggerResponse campo de un documento true es. El fullDocument campo de los eventos de inserción, actualización y reemplazo representa un documento después de la operación dada. Para recibir el fullDocument campo, debe habilitar Full Document en la configuración del disparador.

{
"fullDocument.needsTriggerResponse": true
}

El siguiente procedimiento muestra una forma de probar si tu expresión de coincidencia funciona como se espera:

  1. Descargue MongoDB Shell (mongosh) y úselo para conectarse a su clúster.

  2. Reemplace DB_NAME con el nombre de su base de datos, COLLECTION_NAME con el nombre de su colección y YOUR_MATCH_EXPRESSION con la expresión de coincidencia que desea probar, pegue lo siguiente en mongosh para abrir un flujo de cambios en una colección existente:

    db.getSiblingDB(DB_NAME).COLLECTION_NAME.watch([{$match: YOUR_MATCH_EXPRESSION}])
    while (!watchCursor.isClosed()) {
    if (watchCursor.hasNext()) {
    print(tojson(watchCursor.next()));
    }
    }
  3. En otra ventana de terminal, use mongosh para realizar cambios en algunos documentos de prueba en la colección.

  4. Observe lo que el flujo de cambio filtra dentro y fuera.

En el Project Expression campo, limite la cantidad de campos que procesa el disparador mediante una expresión $project.

Nota

El proyecto es solo inclusivo

Al usar activadores, una expresión de proyección es solo inclusiva. El proyecto no admite la combinación de inclusiones y exclusiones. La expresión del proyecto debe ser inclusiva, ya que los activadores requieren que se operationType incluya.

Si deseas excluir un solo campo, la expresión de proyección debe incluir todos los campos excepto el que deseas excluir. Solo puede excluir explícitamente _id, que se incluye por defecto.

Un disparador se configura con lo siguiente Project Expression:

{
"_id": 0,
"operationType": 1,
"updateDescription.updatedFields.status": 1
}

El objeto de evento de cambio que Atlas pasa a la función de activación solo incluye los campos especificados en la proyección, como en el siguiente ejemplo:

{
"operationType": "update",
"updateDescription": {
"updatedFields": {
"status": "InProgress"
}
}
}

Volver

Atlas Triggers

En esta página