首页 > 解决方案 > MongoDB - 仅当它们是连续的时才对具有匹配字段的记录进行分组/聚合,按时间排序

问题描述

我有一个看起来像这样的集合:

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

到目前为止,我能够实现这一目标的唯一方法是遍历每条记录并检查名称是否已更改。我试过使用聚合和分组,但我还没有找到一种方法来只对上面的连续记录进行分组。有没有办法让我们的聚合框架达到这个结果?

标签: mongodbaggregation-framework

解决方案


推荐阅读