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
/ /
Atlas App Services

Activadores programados

Scheduled triggers allow you to execute server-side logic on a regular schedule that you define. You can use scheduled triggers to do work that happens on a periodic basis, such as updating a document every minute, generating a nightly report, or sending an automated weekly email newsletter.

To create a scheduled Trigger in the Atlas App Services UI:

  1. Haga clic Triggers bajo Build en el menú de navegación de la izquierda.

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

  3. Select Scheduled for the Trigger Type.

Creating a Trigger in the App Services UI.
haga clic para ampliar

Para crear un activador programado con el App Services CLI:

  1. Add a scheduled Trigger configuration file to the triggers subdirectory of a local application directory.

    Nota

    No puedes crear un activador que se ejecute en un cronograma Basic usando App Services CLI. Todas las configuraciones de activador programado importados 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>
    }
  2. Implemente el activador:

    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>

Disabled by default. If enabled, any change events that occurred while this trigger was disabled will not be processed.

Event Type
function_name: <string>

Within the Event Type section, you choose what action is taken when the trigger fires. You can choose to run a function or use AWS EventBridge.

Nota

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 el cron estándar.Sintaxis de trabajo para definir cuándo debe ejecutarse un disparador programado. App Services ejecuta expresiones CRON de disparador según la hora UTC. Cuando todos los campos de una expresión CRON coinciden con la fecha y hora actuales, App Services activa el disparador asociado a la expresión.

Las expresiones CRON son cadenas compuestas por cinco campos delimitados por espacios. Cada campo define una porción granular del cronograma en el que se ejecuta su 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.

Ejemplo

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.

Ejemplo

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.

Ejemplo

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).

Ejemplo

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).

Ejemplo

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.

Ejemplo

The following CRON expression schedules a trigger to execute once every minute of every day:

* * * * *
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.

Ejemplo

La siguiente expresión CRON cronograma un activador para ejecutarse 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.

Ejemplo

The following CRON expression schedules a trigger to execute once every day in January, March, and July at 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.

Ejemplo

La siguiente expresión CRON cronograma un activador para ejecutarse una vez al día desde el 1 de enero hasta el final 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.

Ejemplo

La siguiente expresión CRON programa un activador para ejecutarse en el minuto 0, 25 y 50 de 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") },
]
}

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.

Example UI that configures the trigger
Configuración de activador
{
"type": "SCHEDULED",
"name": "reportDailyOrders",
"function_name": "generateDailyReport",
"config": {
"schedule": "0 7 * * *"
},
"disabled": false
}
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 the Query API with a a $match expression to reduce the number of documents your Function looks at. This helps your Function improve performance and not reach Function memory limits.

Refer the Example section for a Scheduled Trigger using a $match expression.

For additional examples of Triggers integrated into an App Services App, checkout the example Triggers on Github.

Next

¿Qué son los servicios de aplicación Atlas?

En esta página