Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ /

Gatilhos programados

Nesta página

  • Criar um gatilho programado
  • Configuração
  • Expressões de CRON
  • Sintaxe de Expressão
  • Formatar
  • Valores do Campo
  • Exemplo
  • Otimização de desempenho

Os scheduled triggers permitem executar a lógica do lado do servidor em umaprogramação regular definida por você. Você pode usar os triggers programados para realizar trabalho que ocorre de modo periódico, como atualizar um documento a cada minuto, gerando um relatório por noite, enviando uma newsletter semanal por e-mail.

Você pode criar um novo trigger agendado a partir da UI do Atlas ou usando a App Services CLI.

  1. Navegue até a Página Triggers

    1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

    2. Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.

    3. Na barra lateral, clique em Triggers sob o título Services.

      A página Acionadores é exibida.

  2. Clique em Add Trigger para abrir a página de configuração do trigger.

  3. Selecione o tipo de trigger Scheduled.

  4. Configure o trigger e clique em Save.

Exemplo de IU que configura o trigger
  1. Autentique um usuário do MongoDB Atlas :

    Use suachave de API de administração do MongoDB Atlas para fazer login na App Services CLI:

    appservices login --api-key="<API KEY>" --private-api-key="<PRIVATE KEY>"
  2. Extraia os arquivos de configuração mais recentes do seu aplicativo:

    Execute o seguinte comando para obter uma cópia local dos seus arquivos de configuração:

    appservices pull --remote=<App ID>

    Por padrão, o comando extrai arquivos para o diretório de trabalho atual. Você pode especificar um caminho de diretório com o sinalizador --local opcional.

  3. Adicione um trigger arquivo de configuração triggers de scheduled no subdiretório do seu diretório de aplicação local.

    Observação

    Não é possível criar um trigger que é executado em uma programação Basic usando a App Services CLI. Todas as configurações de trigger agendadas importadas devem especificar uma expressão CRON .

    Os arquivos de configuração do trigger agendado têm o seguinte formato:

    /triggers/<triggers name>.json
    {
    "type": "SCHEDULED",
    "name": "<Trigger Name>",
    "function_name": "<Trigger Function Name>",
    "config": {
    "schedule": "<CRON expression>"
    },
    "disabled": <boolean>
    }
  4. Distribua suas alterações:

    Execute o seguinte comando para implementar suas alterações:

    appservices push

Os Triggers Agendados têm as seguintes opções de configuração:

Campo
Descrição
Trigger Type
type: <string>

Selecione Scheduled.

Schedule Type
config.schedule: <string>

Obrigatório. Você pode selecionar Basic ou Advanced. Uma agenda Básica executa o Trigger periodicamente com base no intervalo definido, como "a cada cinco minutos" ou "toda segunda-feira".

Uma programação avançada executa o acionador com base na expressão CRON personalizada que você define.

Skip Events on Re-Enable
skip_catchup_event: <boolean>

Desabilitado por padrão. Se habilitado, quaisquer eventos de alteração ocorridos enquanto esse trigger esteve desabilitado não serão processados.

Event Type
function_name: <string>

Na seção Event Type, você escolhe qual ação será executada quando o trigger for acionado. Você pode optar por executar uma função ou usar o AWS EventBridge.

Um Trigger Agendado não passa nenhum argumento para sua Função vinculada.

Trigger Name
name: <string>

O nome do trigger.

As expressões CRON são cadeias de caracteres definidas pelo usuário que usam a sintaxe de tarefa padrão do cron para definir quando um trigger agendado deve ser executado. O Atlas executa trigger expressões CRON de trigger com base na horaUTC . Sempre que todos os campos em uma expressão CRON coincidem com a data e a hora atuais, o Atlas aciona o trigger trigger associado à expressão.

Expressões CRON são strings compostas de cinco campos delimitados por espaço. Cada campo define uma parte granular da agenda na qual seu trigger associado é executado:

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

minute

[0 - 59]

Representa um ou mais minutos em uma hora.

Se o campo minute de uma expressão CRON tiver um valor de 10, o campo corresponderá a qualquer tempo de dez minutos após a hora (por exemplo, 9:10 AM).

hour

[0 - 23]

Representa uma ou mais horas dentro de um dia em um relógio de 24 horas.

Se o campo hour de uma expressão CRON tiver um valor de 15, o campo corresponderá a qualquer tempo entre 3:00 PM e 3:59 PM.

dayOfMonth

[1 - 31]

Representa um ou mais dias em um mês.

Se o campo dayOfMonth de uma expressão CRON tiver um valor de 3, o campo corresponderá a qualquer hora no terceiro dia do mês.

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 um ou mais meses dentro de um ano.

Um mês pode ser representado por um número (por exemplo, 2 para fevereiro) ou uma string de três letras (por exemplo. APR para abril).

Se o campo month de uma expressão CRON tiver um valor de 9, o campo corresponderá a qualquer momento no mês de setembro.

weekday

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

Representa um ou mais dias em uma semana.

Um dia da semana pode ser representado por um número (por exemplo, 2 para uma terça-feira) ou uma sequência de três letras (por exemplo, THU para uma quinta-feira).

Se o campo weekday de uma expressão CRON tiver um valor de 3, o campo corresponderá a qualquer hora em uma quarta-feira.

Cada campo em uma expressão CRON pode conter um valor específico ou uma expressão que avalia para um conjunto de valores. A tabela a seguir descreve valores e expressões de campos válidos:

Tipo de Expressão
Descrição
All Values
(*)

Corresponde a todos os valores de campo possíveis.

Disponível em todos os campos de expressão.

A expressão CRON a seguir programa um trigger para ser executado uma vez a cada minuto todos os dias:

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

Corresponde a um valor de campo específico. Para campos diferentes de weekday e month esse valor sempre será um inteiro. Um campo weekday ou month pode ser um inteiro ou uma cadeia de caracteres de três letras (por exemplo, TUE ou AUG).

Disponível em todos os campos de expressão.

A seguinte expressão CRON agenda um trigger para ser executado uma vez por dia às 11:00 AM UTC:

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

Corresponde a uma lista de duas ou mais expressões de campo ou valores específicos.

Disponível em todos os campos de expressão.

A expressão CRON a seguir programa um trigger para ser executado uma vez por dia em janeiro, março e julho às 11:00 AM UTC:

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

Corresponde a uma faixa contínua de valores entre campos, incluindo dois valores de campo específicos.

Disponível em todos os campos de expressão.

A expressão CRON a seguir programa um trigger para ser executado uma vez por dia, de 1janeiro até o final de abril às 11:00 AM UTC:

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

Corresponde a qualquer momento em que o valor da etapa divide uniformemente o valor do campo sem nenhum restante (ou seja, quando Value % Step == 0).

Disponível nos campos de expressão minute e hour.

A expressão CRON a seguir programa um trigger para ser executado nos 0th, 25th e 50th minutos de cada hora:

*/25 * * * *

Uma loja online deseja gerar um relatório diário de todas as vendas do dia anterior. Ela registra todas as ordens na collection store.orders como documentos que se assemelham ao seguinte:

{
_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") },
]
}
Exemplo de IU que configura o trigger
Configuração do trigger
{
"type": "SCHEDULED",
"name": "reportDailyOrders",
"function_name": "generateDailyReport",
"config": {
"schedule": "0 7 * * *"
},
"disabled": false
}

Para gerar o relatório diário, a loja cria um Trigger agendado que dispara todos os dias às 7:00 AM UTC. Quando o Trigger é acionado, ele chama sua função Atlas Function vinculada, generateDailyReport, que executa uma consulta de agregação na coleção store.orders para gerar o relatório. A Função então armazena o resultado da agregação na coleção store.reports.

gerarDailyReport
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 a API de query com uma expressão a $match para reduzir o número de documentos examinados pela Função. Isso ajuda sua função a melhorar o desempenho e não atingir os limites de memória da função.

Consulte também a seção Exemplo de um trigger agendado usando uma expressão$match.

Voltar

Gatilhos de banco de dados