У меня есть коллекция, которая выглядит примерно так:
[{
"_id" : ...,
"name" : "bla",
"type" : "A",
"time" : NumberInt(1)
},
{
"_id" : ...,
"name" : "bla",
"type" : "A",
"time" : NumberInt(2)
},
{
"_id" : ...,
"name" : "bla",
"type" : "A",
"time" : NumberInt(3)
},
{
"_id" : ...,
"name" : "cla",
"type" : "B",
"time" : NumberInt(4)
},
{
"_id" : ...,
"name" : "cla",
"type" : "A",
"time" : NumberInt(5)
},
{
"_id" : ...,
"name" : "bla",
"type" : "A",
"time" : NumberInt(6)
}]
Я хочу отсортировать по времени, затем группировать по «имени» и сформировать список типов, но только для смежных записей с одинаковыми именами (по времени). Результат, который я хочу, должен выглядеть примерно так:
[{
"_id": "....",
"name": "bla",
"types": ["A", "A", "A"],
"start_time": 1,
"end_time": 3
},
{
"_id": "....",
"name": "cla",
"types": ["B", "A"],
"start_time": 4,
"end_time": 5
},
{
"_id": "....",
"name": "bla",
"types": ["A"],
"start_time": 6,
"end_time": 6
}]
Единственный способ, которым я смог достичь этого, - это перебирать каждую запись и проверять, изменилось ли имя. Я пытался использовать агрегат и группу, но я не нашел способа группировать только непрерывные записи, как указано выше. Есть ли у нас способ агрегации для достижения этого результата?