mongodb - 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
}]
到目前为止,我能够实现这一目标的唯一方法是遍历每条记录并检查名称是否已更改。我试过使用聚合和分组,但我还没有找到一种方法来只对上面的连续记录进行分组。有没有办法让我们的聚合框架达到这个结果?
解决方案
推荐阅读
- c# - 如何将某些东西移动到“另一个程序集”?
- spacy - 尝试使用 spacy 的英文包时遇到错误
- mongodb - 如何在一个文档 MongoDB 中找到具有相似字段名称的子字段
- laravel-5 - Laravel 调度程序无法在 Dreamhost VPS 中运行
- json - 如何在flutter中更新本地json字段
- javascript - 如何在 vuejs 中使用循环包装 2 个或更多 html 元素
- ansible - 如何获取结果并通过 ansible 中的字典传递
- python - 拆分后获取子字符串的值
- python - 为什么我的代码会打开另一个文件并处理错误异常?
- indexing - AgensGraph 上大数据入节点的效率