Я оцениваю, насколько хорошо фреймворк агрегации MongoDB соответствует нашим потребностям, поскольку в настоящее время мы работаем поверх SQL Server. Мне сложно выполнить конкретный запрос:
Скажем, у меня есть следующие псевдозаписи (смоделированные как столбцы в таблице sql и как полный документ в коллекции mongodb)
{
name: 'A',
timespent: 100,
},
{
name: 'B',
timespent: 200,
},
{
name: 'C',
timespent: 300,
},
{
name: 'D',
timespent: 400,
},
{
name: 'E',
timespent: 500,
}
Я хочу сгруппировать поле времени по диапазонам и подсчитать количество вхождений, чтобы получить, например, следующие псевдозаписи:
results{
0-250: 2,
250-450: 2,
450-650: 1
}
Обратите внимание, что эти диапазоны (250, 450 и 650) являются динамическими и, вероятно, со временем будут изменены пользователем. В SQL мы извлекали результаты примерно так:
select range, COUNT(*) as total from (
select case when Timespent <= 250 then '0-250'
when Timespent <= 450 then '200-450'
else '450-600' end as range
from TestTable) as r
group by r.range
Опять же, обратите внимание, что этот sql создается нашим приложением динамически, чтобы соответствовать конкретным диапазонам, доступным в любой момент.
Я изо всех сил пытаюсь найти подходящие конструкции в структуре агрегации mongodb для выполнения таких запросов. Я могу запросить результаты одного диапазона, вставив $ match в конвейер (т.е. получить результат одного диапазона), но я не могу понять, как извлечь все диапазоны и их количество в одном запросе конвейера.