$setWindowFields — это стадия aggregation pipeline, которая позволяет выполнять оконные функции над набором документов. Она похожа на SQL-клаузулу OVER() и позволяет проводить вычисления, которые ссылаются на несколько документов, не свёртывая их в один результат — в отличие от $group.
partitionBy — разделяет документы на группы (аналог SQL-клаузулы PARTITION BY)sortBy — определяет порядок документов внутри каждого разделаoutput — указывает новые поля для добавления и оконные функции для примененияdocuments / range — определяет фрейм окна, то есть какие документы включаются в каждое вычисление$rank или $denseRank{
$setWindowFields: {
partitionBy: "$department",
sortBy: { date: 1 },
output: {
runningTotal: {
$sum: "$sales",
window: { documents: ["unbounded", "current"] }
}
}
}
}
Это вычисляет накопительный итог по продажам для каждого department, упорядоченный по date, до каждого текущего документа.
В отличие от $group, $setWindowFields сохраняет все исходные документы, добавляя к ним вычисленные поля. Это идеально подходит для аналитических запросов, где контекст на уровне документа должен быть сохранён вместе с агрегированными значениями.
Этап $setWindowFields сохраняет все исходные документы в выводе и добавляет вычисленные поля оконных функций, в отличие от $group, который объединяет документы в сводки по группам.
Новый — ещё не проверен сообществом
Вы