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

128. Товары по ценовым диапазонам

Средняя

Фильтр «Цена» в категории «Куртки» показывает, сколько товаров в каждом диапазоне: до 1000 ₽, 1000–2999, 3000–9999 и от 10 000 ₽. У части карточек цены пока нет — товар ещё не поступил на склад.

Посчитайте товары по диапазонам. Диапазон обозначьте нижней границей band: 0, 1000, 3000, 10000; товары без цены (поля нет или null) — band: -1. Пустые диапазоны не выводите. Поля ответа band, items, порядок по band.

В работе: Фасетные фильтры, гистограммы чеков, распределения по возрасту и стажу.

MongoDB · MongoDB 8.0.20

Коллекции

products — товар категории

ПолеТипЧто значит
skuintартикул
price_rubint / null / нет поляцена
categorystringкатегория

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

products

[
 {
  "sku": 1,
  "category": "Куртки",
  "price_rub": 499
 },
 {
  "sku": 2,
  "category": "Куртки",
  "price_rub": 1000
 },
 {
  "sku": 3,
  "category": "Куртки",
  "price_rub": 2999
 },
 {
  "sku": 4,
  "category": "Куртки",
  "price_rub": 3000
 },
 {
  "sku": 5,
  "category": "Куртки",
  "price_rub": 15990
 },
 {
  "sku": 6,
  "category": "Куртки"
 },
 {
  "sku": 7,
  "category": "Куртки",
  "price_rub": null
 }
]

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

[
 {
  "band": -1,
  "items": 2
 },
 {
  "band": 0,
  "items": 1
 },
 {
  "band": 1000,
  "items": 2
 },
 {
  "band": 3000,
  "items": 1
 },
 {
  "band": 10000,
  "items": 1
 }
]
Как проверяем Запрос — JSON: имя коллекции и стадии aggregate, как в db.коллекция.aggregate([...]). Выполняем его в браузере движком агрегаций на 4 наборах документов: пример выше и скрытые — с пропущенными полями, null и пустыми коллекциями. Порядок документов важен, порядок полей внутри документа — нет. $out и $merge запрещены.
{"collection": "products", "pipeline": [ … ]}
$bucketграницы диапазоновdefault$switch

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

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