Фильтр «Цена» в категории «Куртки» показывает, сколько товаров в каждом диапазоне: до 1000 ₽, 1000–2999, 3000–9999 и от 10 000 ₽. У части карточек цены пока нет — товар ещё не поступил на склад.
Посчитайте товары по диапазонам. Диапазон обозначьте нижней границей band: 0, 1000, 3000, 10000; товары без цены (поля нет или null) — band: -1. Пустые диапазоны не выводите. Поля ответа band, items, порядок по band.
В работе: Фасетные фильтры, гистограммы чеков, распределения по возрасту и стажу.
MongoDB · MongoDB 8.0.20
Коллекции
products — товар категории
| Поле | Тип | Что значит |
|---|---|---|
sku | int | артикул |
price_rub | int / null / нет поля | цена |
category | string | категория |
Пример: документы
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": [ … ]}
Источник: на данных маркетплейса: цены товаров категории. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Посмотреть данные, проверить часть pipeline. На зачёт не влияет.
Здесь появится результат отправки.