Я оцениваю, насколько хорошо структура агрегации 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,
}
Я хочу сгруппировать поле timepent в диапазоны и подсчитать случаи, чтобы я получил, например. следующие псевдо-записи:
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 в конвейер (т.е. Получив результат одного диапазона), но я не могу понять, как извлечь все диапазоны и их подсчеты в одном запросе конвейера.