Docs Menu
Docs Home
/
Atlas
/ /

予定されたTriggers

スケジュールされたトリガーを使用すると、 定義した定期的なスケジュールでサーバー側のロジックを実行できます。 スケジュールされたトリガーを使用して、毎分ごとのドキュメント更新、夜間レポートの生成、または毎週ごとのメールニュースレターの自動送信など、定期的に発生する作業を行うことができます。

新しいスケジュールされたtriggerは、 Atlas UIから、またはApp Services CLIを使用して作成できます。

  1. Triggersページに移動する

    警告

    ナビゲーションの改善が進行中

    現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。

    1. まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。

    2. まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。

    3. サイドバーで、 Services見出しの下のTriggersをクリックします。

      Triggersページが表示されます。

  2. Add Triggerをクリックしてトリガー設定ページを開きます。

  3. Scheduled trigger の種類を選択します。

  4. trigger を設定し、 [ Save ] をクリックします。

トリガーを構成する UI の例
  1. MongoDB Atlasユーザーを認証します。

    MongoDB Atlas Administration APIキーを使用して、App Services CLI にログします。

    appservices login --api-key="<API KEY>" --private-api-key="<PRIVATE KEY>"
  2. アプリの最新の構成ファイルを取得します。

    次のコマンドを実行して、構成ファイルのローカルコピーを取得します。

    appservices pull --remote=<App ID>

    デフォルトでは 、コマンドは現在の 作業ディレクトリにファイルをプルします。 任意の --localフラグを使用してディレクトリパスを指定できます。

  3. 予定されたtriggerの構成ファイルを、 ローカルアプリケーションディレクトリの triggers サブディレクトリに追加します。

    注意

    triggerBasicを使用して、 スケジュールで実行されるApp Services CLI を作成することはできません。インポートされたすべてのスケジュールされたtrigger 構成では CRON式 を指定する 必要があり ます。

    予定されたトリガーの構成ファイルの形式は次のとおりです。

    /triggers/<triggers name>.json
    {
    "type": "SCHEDULED",
    "name": "<Trigger Name>",
    "function_name": "<Trigger Function Name>",
    "config": {
    "schedule": "<CRON expression>"
    },
    "disabled": <boolean>
    }
  4. 変更を配置します。

    次のコマンドを実行して、変更を配置します。

    appservices push

スケジュールされた Triggers には、次の構成オプションがあります。

フィールド
説明
Trigger Type
type: <string>

Scheduled を選択します。

Schedule Type
config.schedule: <string>

必須。[ Basic ] または [ Advanced ] を選択できます。基本スケジュールでは、設定した間隔に基づいてトリガーが定期的に実行されます。たとえば、「5 分ごと」、「毎週月曜日」などです。

高度なスケジュールでは、定義したカスタム CRON式に基づいてトリガーが実行されます。

Skip Events on Re-Enable
skip_catchup_event: <boolean>

デフォルトで無効です。有効にすると、この trigger が無効になっている間に発生した変更イベントは処理されません。

Event Type
function_name: <string>

Event Type セクションで、trigger が起動したときに実行されるアクションを選択します。関数を実行するか、 AWS EventBridge を使用するかを選択できます。

予定されたトリガーは、リンク先の関数に引数を渡しません。

Trigger Name
name: <string>

triggerの名前。

CRON 式は標準の cron を使用するユーザー定義の文字列です スケジュールされたtrigger をいつ実行するかを定義するためのジョブ構文。Atlasはtrigger UTC 時間 に基づいて CRON 式を実行します 。CRON式のすべてのフィールドが現在の日付と時刻と一致するたびに、 Atlasは式に関連付けられているtriggerを起動します。

CRON 式は、スペースで区切られた 5 つのフィールドで構成される文字列です。各フィールドは、関連付けられたトリガーが実行されるスケジュールの詳細な部分を定義します。

* * * * *
│ │ │ │ └── weekday...........[0 (SUN) - 6 (SAT)]
│ │ │ └──── month.............[1 (JAN) - 12 (DEC)]
│ │ └────── dayOfMonth........[1 - 31]
│ └──────── hour..............[0 - 23]
└────────── minute............[0 - 59]
フィールド
Valid Values
説明

minute

[0 - 59]

1 時間以内の 1 分以上を表します。

CRON 式のminuteフィールドの値が10の場合、フィールドは毎時10分後の任意の時間に一致します(例:9:10 AM)。

hour

[0 - 23]

24 時間制で 1 日のうちの 1 時間以上を表します。

CRON 式の hour フィールドの値が 15の場合、そのフィールドは 3:00 PM から 3:59 PMまでの任意の時間と一致します。

dayOfMonth

[1 - 31]

1 か月内の 1 日以上を表します。

CRON 式のdayOfMonthフィールドの値が3の場合、フィールドは毎月 3 日の任意の時刻に一致します。

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)

1 年のうちの 1 つ以上の月を表します。

月は数字(例:2 2 月)または 3 文字の文字列(例:4月は APR)で表すことができます。

CRON 式の month フィールドの値が 9 の場合、このフィールドは 9 月のいずれの時間にも一致します。

weekday

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

1 週間内の 1 日以上を表します。

曜日は、数字(例:火曜日の場合は 2)または 3 文字の文字列(例:木曜日の場合 THU)のどちらかで表すことができます。

CRON 式の weekday フィールドの値が 3 の場合、このフィールドは水曜日いずれの時間にも一致します。

CRON 式の各フィールドには、特定の値、または値の 1 セットとして評価される式を含めることができます。次の表では、有効なフィールド値と式について説明します。

式のタイプ
説明
All Values
(*)

あらゆるフィールド値と一致します。

すべての式フィールドで使用できます。

次の CRON 式は、トリガーを毎日 1 分ごとに実行するように設定します。

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

特定のフィールド値に一致します。weekday および month 以外のフィールドの場合、この値は常に整数になります。weekday または month フィールドは、整数または 3 文字の文字列(例: TUE または AUG)のどちらでも構いません。

すべての式フィールドで使用できます。

次の CRON式は、トリガーを毎日 11:00 にtriggerを実行するように設定します。

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

2 つ以上のフィールド式または特定の値のリストに一致します。

すべての式フィールドで使用できます。

以下の CRON式は、1 月、3 月、7 月の毎日 11:00 にtriggerを実行するように設定します。

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

2 つの特定のフィールド値の間にあり、かつそれらの値を含む、連続した範囲のフィールド値に一致します。

すべての式フィールドで使用できます。

以下の CRON式は、1 月 1 日から 4 月末までの毎日 11:00 にtriggerを実行するように設定します。

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

ステップ値がフィールド値を余りなしで均等に分割できる任意の時間(つまり Value % Step == 0 の場合)に一致します。

minute および hour 式フィールドで使用できます。

次の CRON式は、毎時 0 分、25 分、50 分にtriggerを実行するように設定します。

*/25 * * * *

あるオンラインショップが、前日の全売上の日次レポートを作成したいと考えています。彼らはすべての注文を store.orders コレクションに、次のようなドキュメントとして記録します。

{
_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") },
]
}
トリガーを構成する UI の例
trigger 構成
{
"type": "SCHEDULED",
"name": "reportDailyOrders",
"function_name": "generateDailyReport",
"config": {
"schedule": "0 7 * * *"
},
"disabled": false
}

日次レポートを生成するために、このショップは毎日 7:00 AM UTC に発動するように予定されたトリガーを作成します。このトリガーが発動すると、これにリンクされた Atlas Function generateDailyReport が呼び出され、 store.orders コレクションに対して集計クエリが実行され、レポートが生成されます。そして、その関数は集計の結果を 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;
}

関数が調べるドキュメントの数を減らすには、 $match式と共に Query APIを使用します。 これにより関数のパフォーマンスが向上し、関数のメモリ制限 に達しなくなります。

$match式を使用する予定されたtriggerの例のセクション も参照してください。

戻る

データベース Triggers

項目一覧