Операции по карте хранятся в tx_buckets шаблоном bucket: документ на клиента и месяц с массивом txs, не больше 200 операций в документе. Если операций больше, открывается следующий документ того же месяца с seq на единицу больше.
Для кешбэка «Такси 5 %» посчитайте по каждому клиенту за март 2026 года сумму операций категории «Такси» (taxi_rub, возвраты с минусом уменьшают сумму) и их число (taxi_count). Клиенты без операций такси в марте не нужны.
Порядок: по убыванию taxi_rub, затем по client_id.
В работе: Временные ряды в шаблоне bucket: операции, показания датчиков, события в документе на период.
MongoDB · MongoDB 8.0.20
Коллекции
tx_buckets — операции клиента за месяц, часть месяца
| Поле | Тип | Что значит |
|---|---|---|
client_id | int | клиент |
month | string | ГГГГ-ММ |
seq | int | номер документа в месяце |
txs | array<object> | at, amount_rub, category |
Пример: документы
tx_buckets
[
{
"seq": 1,
"txs": [
{
"at": "2026-03-02T08:10:00Z",
"category": "Такси",
"amount_rub": 420
},
{
"at": "2026-03-02T19:00:00Z",
"category": "Супермаркеты",
"amount_rub": 2310
},
{
"at": "2026-03-05T22:40:00Z",
"category": "Такси",
"amount_rub": 380
}
],
"month": "2026-03",
"client_id": 7001
},
{
"seq": 2,
"txs": [
{
"at": "2026-03-28T07:55:00Z",
"category": "Такси",
"amount_rub": 650
}
],
"month": "2026-03",
"client_id": 7001
},
{
"seq": 1,
"txs": [
{
"at": "2026-03-10T13:00:00Z",
"category": "Кафе",
"amount_rub": 900
},
{
"at": "2026-03-10T15:30:00Z",
"category": "Такси",
"amount_rub": 1200
}
],
"month": "2026-03",
"client_id": 7002
},
{
"seq": 1,
"txs": [
{
"at": "2026-03-11T09:00:00Z",
"category": "Супермаркеты",
"amount_rub": 500
}
],
"month": "2026-03",
"client_id": 7003
}
]
Ожидаемый ответ
[
{
"taxi_rub": 1450,
"client_id": 7001,
"taxi_count": 3
},
{
"taxi_rub": 1200,
"client_id": 7002,
"taxi_count": 1
}
]
db.коллекция.aggregate([...]). Выполняем его в браузере движком агрегаций на 5 наборах документов: пример выше и скрытые — с пропущенными полями, null и пустыми коллекциями. Порядок документов важен, порядок полей внутри документа — нет. $out и $merge запрещены.
{"collection": "tx_buckets", "pipeline": [ … ]}
Источник: на данных банка: операции клиента в помесячных документах. Условие пересказано своими словами.
Посмотреть данные, проверить часть pipeline. На зачёт не влияет.
Здесь появится результат отправки.