我有一组带有时间戳的日志,需要通过一些不存在的“虚拟会话”对日志进行分组。
如果上一次会话中的上一次登录与首次登录之间有一半小时,则会开始新的分组会话。
例如,我们有以下数据集:
JSON
它应该分为两个虚拟会话。作为分组的结果,我可以获得mongo聚合$ group中每个组的最小和最大时间,但是如何编写正确的表达式?
预期答案类似于
Model
答案 0 :(得分:1)
不幸的是mongo查询无法做到这一点,因为前一行没有句柄(如CTE公用表表达式)。
要解决此问题,您需要处理数据客户端(或使用mongo控制台中的javascript - 如sql world中的SP)并迭代所有文档以检查时间间隔并向集合添加分组指示符。 然后,您将能够通过添加分组指示符进行分组。
考虑起诉$ let,因为它可以访问外部变量 - 但这是RO访问权限,因此我们无法对此进行转发。
玩得开心! 欢迎任何评论。