MongoDB - Группировка / агрегирование записей с совпадающими полями только тогда, когда они непрерывны, отсортированы по времени - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть коллекция, которая выглядит примерно так:

[{ 
"_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
}]

Единственный способ, которым я смог достичь этого, - это перебирать каждую запись и проверять, изменилось ли имя. Я пытался использовать агрегат и группу, но я не нашел способа группировать только непрерывные записи, как указано выше. Есть ли у нас способ агрегации для достижения этого результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...