Mongo db $ group动态表达式

时间:2016-05-04 08:38:57

标签: mongodb aggregation-framework

我有一组带有时间戳的日志,需要通过一些不存在的“虚拟会话”对日志进行分组。

如果上一次会话中的上一次登录与首次登录之间有一半小时,则会开始新的分组会话。

例如,我们有以下数据集:

JSON

它应该分为两个虚拟会话。作为分组的结果,我可以获得mongo聚合$ group中每个组的最小和最大时间,但是如何编写正确的表达式?

预期答案类似于

Model

1 个答案:

答案 0 :(得分:1)

不幸的是mongo查询无法做到这一点,因为前一行没有句柄(如CTE公用表表达式)。

要解决此问题,您需要处理数据客户端(或使用mongo控制台中的javascript - 如sql world中的SP)并迭代所有文档以检查时间间隔并向集合添加分组指示符。 然后,您将能够通过添加分组指示符进行分组。

考虑起诉$ let,因为它可以访问外部变量 - 但这是RO访问权限,因此我们无法对此进行转发。

玩得开心! 欢迎任何评论。