小编Chr*_*ris的帖子

如何将Mongodb时间点数据分组到连续的时间组?

我有一个类似于以下形式的决策文件集合:

    { 
    _id: ObjectId("23de23802fe925b6ef7162a4"),
    userId: 6de4, 
    decision: true, 
    datetime:ISODate("2016-07-27T08:22:47.169Z")
    },
    { 
    _id: ObjectId("507f1f77bcf86cd799439011"),
    userId: 23f4, 
    decision: true, 
    datetime:ISODate("2016-02-03T11:48:50.456Z")
    },
.
.
.
Run Code Online (Sandbox Code Playgroud)

我正在努力想出一种将这些文档分组为连续日期时间组的方法.即文档应该属于特定组,如果它小于,比如组中至少一个其他文档的5分钟.

目标是实现在"会话"中做出的决策群.然后可以使用聚合(例如每个决策的平均时间等)对这些"会话"组进行进一步的见解.

如果不能使用MongoDb的聚合框架,可以使用map-reduce或其他方法完成.我愿意接受建议.

澄清

描述问题的另一种方法是将以下算法应用于文档集合.

  1. 首先将文档放入日期时间顺序.
  2. 将最早出现的文件(按时间顺序排列)放在自己的 组中,然后转到下一个文档.
  3. 如果下一个文档的日期时间小于一个文档之后的指定时间(比如5分钟),则将其放在之前相同的组中.如果没有,请创建一个新组并将此文档放入其中.
  4. 重复步骤3.直到遍历所有文档.

这将使集合具有所需的"会话"分组.当然,这只是描绘问题的一种方式.我不知道有什么方法可以遍历有序集合,同时使用MongoDb以这种方式进行分组.

可以这样做吗?有没有其他方法可以使用MongoDb获得相同的结果?

mapreduce mongodb mongodb-query aggregation-framework

8
推荐指数
1
解决办法
209
查看次数

如何检测 mat-sidenav-container 中的滚动事件

我不知道如何检测 mat-sidenav-container 何时在角材料 2 中滚动。

当用户滚动时,我想在我的组件上调用一个方法。但是,当使用 sidenav-container 时,不再在窗口上触发滚动事件。

而是<mat-sidenav-content cdkscrollable></mat-sidenav-content>添加了一个额外的元素,这就是滚动条所在的位置。如果无法直接访问该组件以在其上放置(scroll)="myMethod()"事件侦听器,如何检测该组件上何时发生滚动。

有任何想法吗?

scroll angular-material2 angular

5
推荐指数
1
解决办法
8147
查看次数