Войти Регистрация
Data base

129. Заработок водителя нарастающим итогом за день

Сложная

В rides — завершённые поездки такси в Екатеринбурге: водитель driver_id, время завершения finished_at (строка ISO в UTC) и стоимость fare_rub.

В приложении водителя под каждой поездкой — сумма за сутки на этот момент. Посчитайте day_total: сумму fare_rub всех поездок этого водителя за те же сутки UTC до текущей включительно. Сутки начинаются заново в 00:00 UTC.

Верните driver_id, finished_at, fare_rub, day_total, по driver_id, затем по finished_at. Двух поездок одного водителя с одним временем нет.

В работе: Нарастающие итоги: баланс по операциям, прогресс к цели дня, накопленная выручка.

MongoDB · MongoDB 8.0.20

Коллекции

rides — завершённая поездка

ПолеТипЧто значит
driver_idstringводитель
finished_atstringISO 8601, UTC
fare_rubintстоимость

Пример: документы

rides

[
 {
  "fare_rub": 350,
  "driver_id": "d-1042",
  "finished_at": "2026-05-12T07:10:00Z"
 },
 {
  "fare_rub": 1180,
  "driver_id": "d-1042",
  "finished_at": "2026-05-12T18:05:00Z"
 },
 {
  "fare_rub": 620,
  "driver_id": "d-1042",
  "finished_at": "2026-05-12T09:40:00Z"
 },
 {
  "fare_rub": 900,
  "driver_id": "d-2210",
  "finished_at": "2026-05-12T10:00:00Z"
 }
]

Ожидаемый ответ

[
 {
  "fare_rub": 350,
  "day_total": 350,
  "driver_id": "d-1042",
  "finished_at": "2026-05-12T07:10:00Z"
 },
 {
  "fare_rub": 620,
  "day_total": 970,
  "driver_id": "d-1042",
  "finished_at": "2026-05-12T09:40:00Z"
 },
 {
  "fare_rub": 1180,
  "day_total": 2150,
  "driver_id": "d-1042",
  "finished_at": "2026-05-12T18:05:00Z"
 },
 {
  "fare_rub": 900,
  "day_total": 900,
  "driver_id": "d-2210",
  "finished_at": "2026-05-12T10:00:00Z"
 }
]
Как проверяем Запрос — JSON: имя коллекции и стадии aggregate, как в db.коллекция.aggregate([...]). Выполняем его в браузере движком агрегаций на 4 наборах документов: пример выше и скрытые — с пропущенными полями, null и пустыми коллекциями. Порядок документов важен, порядок полей внутри документа — нет. $out и $merge запрещены.
{"collection": "rides", "pipeline": [ … ]}
$setWindowFieldsнарастающий итогокно documentsпартиции$push + $slice

Источник: на данных такси: поездки водителей. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.