Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Activadores programados

Los activadores programados permiten ejecutar lógica del lado del servidor en un cronograma regular que tú defines. Puedes utilizar activadores programados para realizar tareas periódicas, tales como actualizar un documento cada minuto, generar un reporte nocturno o enviar un boletín semanal automatizado de correo electrónico.

Puedes crear un nuevo activador programado desde la Interfaz de Usuario de Atlas o utilizando la App Services CLI.

  1. En Atlas, ve a 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 activador Scheduled.

  4. Configura el activador y haz clic en Save.

  1. Autenticar a un usuario MongoDB Atlas:

    Usa tu 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. Solicita los archivos de configuración más recientes de tu aplicación:

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

    appservices pull --remote=<App ID>

    Por defecto, el comando descarga archivos en el directorio de trabajo actual. Puedes especificar una ruta de directorio con el opcional --local flag.

  3. Agrega un activador programado archivo de configuración al subdirectorio triggers de tu directorio local de la aplicación.

    Nota

    No se puede crear un disparador que se ejecute Basic según una programación mediante la CLI de App Services. Todas las configuraciones de disparadores programados importadas deben especificar una expresión CRON.

    Los archivos de configuración de activador programado tienen la siguiente forma:

    /triggers/<triggers name>.json
    {
    "type": "SCHEDULED",
    "name": "<Trigger Name>",
    "function_name": "<Trigger Function Name>",
    "config": {
    "schedule": "<CRON expression>"
    },
    "disabled": <boolean>
    }
  4. Implementa tus cambios:

    Ejecute el siguiente comando para implementar sus cambios:

    appservices push

Los activadores programados tienen las siguientes opciones de configuración:

Campo
Descripción
Trigger Type
type: <string>

Seleccione Scheduled.

Schedule Type
config.schedule: <string>

Requerido. Puedes seleccionar Basic o Advanced. Un cronograma básico ejecuta el activador periódicamente según el intervalo que establezcas, como "cada cinco minutos" o "cada lunes".

Un cronograma avanzado ejecuta el activador en función de la expresión CRON personalizada que defines.

Skip Events on Re-Enable
skip_catchup_event: <boolean>

Desactivado por defecto. Si está habilitado, los eventos de cambio ocurridos mientras este activador estaba deshabilitado no se procesarán.

Event Type
function_name: <string>

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.

Un activador programado no pasa ningún argumento a su Función vinculada.

Trigger Name
name: <string>

El nombre del activador.

Las expresiones CRON son cadenas definidas por el usuario que utilizan la sintaxis estándar de tareas cron para definir cuándo debe ejecutarse un Trigger programado. Atlas ejecuta expresiones activador CRON con base en la hora UTC. Siempre que todos los campos en una expresión CRON coincidan con la fecha y hora actuales, Atlas activa el activador asociado con la expresión.

Las expresiones CRON son cadenas compuestas por cinco campos delimitados por espacios. Cada campo define una parte granular del cronograma en la que se ejecuta el activador asociado:

* * * * *
│ │ │ │ └── weekday...........[0 (SUN) - 6 (SAT)]
│ │ │ └──── month.............[1 (JAN) - 12 (DEC)]
│ │ └────── dayOfMonth........[1 - 31]
│ └──────── hour..............[0 - 23]
└────────── minute............[0 - 59]
Campo
Valid Values
Descripción

minute

[0 - 59]

Representa uno o más minutos dentro de una hora.

Si el campo minute de una expresión CRON tiene un valor de 10, el campo coincide en cualquier momento diez minutos después de la hora (por ejemplo, 9:10 AM).

hour

[0 - 23]

Representa una o más horas dentro de un día en un reloj de 24 horas.

Si el campo hour de una expresión CRON tiene un valor de 15, el campo coincide con cualquier horario entre 3:00 PM y 3:59 PM.

dayOfMonth

[1 - 31]

Representa uno o más días en un mes.

Si el campo dayOfMonth de una expresión CRON tiene un valor de 3, el campo coincide con cualquier hora en el tercer día del mes.

month

1 (JAN) 7 (JUL)
2 (FEB) 8 (AUG)
3 (MAR) 9 (SEP)
4 (APR) 10 (OCT)
5 (MAY) 11 (NOV)
6 (JUN) 12 (DEC)

Representa uno o más meses dentro de un año.

Un mes puede estar representado tanto por un número (por ejemplo, 2 para febrero) o una string de tres letras (p. ej. APR para abril).

Si el campo month de una expresión CRON tiene un valor de 9, el campo coincide con cualquier momento del mes de septiembre.

weekday

0 (SUN)
1 (MON)
2 (TUE)
3 (WED)
4 (THU)
5 (FRI)
6 (SAT)

Representa uno o más días dentro de una semana.

Un día de la semana se puede representar mediante un número (por ejemplo, 2 para un martes) o una cadena de tres letras (por ejemplo, THU para un jueves).

Si el campo weekday de una expresión CRON tiene un valor de 3, el campo coincidirá con cualquier hora los miércoles.

Cada campo en una expresión CRON puede contener un valor específico o una expresión que evalúe a un conjunto de valores. La siguiente tabla describe los valores y expresiones válidos para los campos:

Tipo de expresión
Descripción
All Values
(*)

Coincide con todos los valores de campo posibles.

Disponible en todos los campos de expresión.

La siguiente expresión CRON programa que un activador se ejecute una vez cada minuto de cada día:

* * * * *
Specific Value
(<Value>)

Coincide con un valor de campo específico. Para campos que no sean weekday y month, este valor siempre será un número entero. Un campo weekday o month puede ser un número entero o una string de tres letras (por ejemplo, TUE o AUG).

Disponible en todos los campos de expresión.

La siguiente expresión CRON programa un activador para que se ejecute una vez al día a las 11:00 AM UTC:

0 11 * * *
List of Values
(<Expression1>,<Expression2>,...)

Coincide con una lista de dos o más expresiones de campo o valores específicos.

Disponible en todos los campos de expresión.

La siguiente expresión CRON programa un activador para que se ejecute una vez al día en enero, marzo y julio a las 11:00 AM UTC:

0 11 * 1,3,7 *
Range of Values
(<Start Value>-<End Value>)

Coincide con un rango continuo de valores de campo entre e incluyendo dos valores de campo específicos.

Disponible en todos los campos de expresión.

La siguiente expresión CRON programa un disparador para que se ejecute una vez al día desde el 1de enero hasta fines de abril a las 11:00 AM UTC:

0 11 * 1-4 *
Modular Time Step
(<Field Expression>/<Step Value>)

Coincide con cualquier momento en el que el valor del paso divida uniformemente el valor del campo sin residuos (es decir, cuando Value % Step == 0).

Disponible en los campos de expresión minute y hour.

La siguiente expresión CRON programa un disparador para que se ejecute en los minutos 0, 25y 50de cada hora:

*/25 * * * *

Un almacenar en línea quiere generar un informe diario de todas las ventas del día anterior. Registran todos los pedidos en la colección store.orders como documentos similares a los siguientes:

{
_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: Decimal128("10.99") }
],
shippingLocation: [
{ location: "Memphis", time: ISODate("2018-06-27T18:22:33.243Z") },
]
}
Campo
Configuración

Trigger Type

Scheduled

Schedule Type

Advanced

Establecer un cronograma CHRON.

07***

Configuración de activador
{
"type": "SCHEDULED",
"name": "reportDailyOrders",
"function_name": "generateDailyReport",
"config": {
"schedule": "0 7 * * *"
},
"disabled": false
}

Para generar el informe diario, la tienda crea un activador programado que se activa todos los días a las 7:00 AM UTC. Cuando se activa el activador, llama a su Atlas Function vinculada, generateDailyReport, que ejecuta una query de agregación en la colección store.orders para generar el informe. La función luego almacena el resultado de la agregación en la colección store.reports.

generateDailyReport
exports = function() {
// Instantiate MongoDB collection handles
const mongodb = context.services.get("mongodb-atlas");
const orders = mongodb.db("store").collection("orders");
const reports = mongodb.db("store").collection("reports");
// Generate the daily report
return orders.aggregate([
// Only report on orders placed since yesterday morning
{ $match: {
orderDate: {
$gte: makeYesterdayMorningDate(),
$lt: makeThisMorningDate()
}
} },
// Add a boolean field that indicates if the order has already shipped
{ $addFields: {
orderHasShipped: {
$cond: {
if: "$shipDate", // if shipDate field exists
then: 1,
else: 0
}
}
} },
// Unwind individual items within each order
{ $unwind: {
path: "$orderContents"
} },
// Calculate summary metrics for yesterday's orders
{ $group: {
_id: "$orderDate",
orderIds: { $addToSet: "$_id" },
numSKUsOrdered: { $sum: 1 },
numItemsOrdered: { $sum: "$orderContents.qty" },
totalSales: { $sum: "$orderContents.price" },
averageOrderSales: { $avg: "$orderContents.price" },
numItemsShipped: { $sum: "$orderHasShipped" },
} },
// Add the total number of orders placed
{ $addFields: {
numOrders: { $size: "$orderIds" }
} }
]).next()
.then(dailyReport => {
reports.insertOne(dailyReport);
})
.catch(err => console.error("Failed to generate report:", err));
};
function makeThisMorningDate() {
return setTimeToMorning(new Date());
}
function makeYesterdayMorningDate() {
const thisMorning = makeThisMorningDate();
const yesterdayMorning = new Date(thisMorning);
yesterdayMorning.setDate(thisMorning.getDate() - 1);
return yesterdayMorning;
}
function setTimeToMorning(date) {
date.setHours(7);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
return date;
}

Use la API de $match query con una expresión para reducir el número de documentos que su Función examina. Esto ayuda a que tu función mejore el rendimiento y no alcance los límites de memoria de la Función.

Consulta también la Sección de ejemplos para un disparador programado con una expresión $match.

Volver

Activadores de base de datos

En esta página