Как: $ merge и материализованные представления по требованию - PullRequest
0 голосов
/ 25 марта 2020

В Пн go документах по материализованным представлениям я видел этот пример:

updateMonthlySales = function(startDate) {
   db.bakesales.aggregate( [
      { $match: { date: { $gte: startDate } } },
      { $group: { _id: { $dateToString: { format: "%Y-%m", date: "$date" } }, sales_quantity: { $sum: "$quantity"}, sales_amount: { $sum: "$amount" } } },
      { $merge: { into: "monthlybakesales", whenMatched: "replace" } }
   ] );
};

Я хотел понять

  • , куда мне писать эта функция,
  • и как я могу ее вызвать

Было бы очень удивительно, если бы у кого-нибудь было решение от Play-Framework / Reactive Mon go pov. Способ записи агрегации в Reactive-Mon go довольно сложен, и я хотел найти другой способ запуска агрегации, который. обновляет представление, которое будет прочитано моим приложением.

Любая помощь будет принята с благодарностью:)

1 Ответ

0 голосов
/ 25 марта 2020

На странице используется интерактивная оболочка, чтобы объяснить, как работают материализованные представления. В этом примере они определяют функцию в оболочке mon go, а затем вызывают ее в той же оболочке https://docs.mongodb.com/manual/core/materialized-views/#perform -initial-run

Это только для целей документирования. Вам нужно запустить функцию, чтобы актуализировать представление, и они делают это, вызывая ту же функцию в той же оболочке https://docs.mongodb.com/manual/core/materialized-views/#refresh -materialized-view

Вы не будете делать это вручную в прод. Это должен быть демон для запуска конвейера по расписанию, событию или по требованию. В зависимости от языка, который вы используете для написания демона, синтаксис может быть совершенно другим. Важная часть - это должен быть конвейер агрегации с завершающим этапом $ merge.

...