对mongo中的时间段进行排序和总结

时间:2016-04-14 10:06:48

标签: mongodb meteor mongodb-query minimongo

在一个小型测试网站上,我想记录用户每天主动花在某些链接组上的大致时间段。 至少在任何用户点击我保存这样的文件:

示例文件:

{
"routeGroup": "a",
"time": new Date()
}

想法是过滤某一天的所有文档,按时间对这些文档进行排序,并返回用户在路由组上花费的连续时间段。

示例:

鉴于以下文件(已按日排序并按时间过滤):

{"routegroup": "a", "time": 11:30:00},
{"routegroup": "a", "time": 11:31:00},
{"routegroup": "a", "time": 11:32:00},

{"routegroup": "b", "time": 11:33:00},
{"routegroup": "b", "time": 11:34:00},

{"routegroup": "a", "time": 11:35:00},

{"routegroup": "b", "time": 11:36:00},

{"routegroup": "a", "time": 11:37:00},
{"routegroup": "a", "time": 11:38:00},
{"routegroup": "a", "time": 11:39:00}

因此,用户首先在组“a”中花费3分钟,然后在组“b”中花费2分钟,在组“a”中花费1分钟,依此类推。

这段时间对秒敏感,然后我想总结并返回类似的内容:

// total time spend in routeGroups on day x

{"routegroup": "a", "timeTotal": "7:00"},
{"routegroup": "b", "timeTotal": "3:00"}

问题:这有可能,如果,如何?

提前感谢您的帮助!

莫夫

1 个答案:

答案 0 :(得分:1)

聚合框架可以为您提供预期的答案:

db.times.aggregate([
    {$group: {_id: '$routegroup', timeTotal: {$sum : 1}}},
    {$project: {_id: 0, routegroup: '$_id', timeTotal: 1}}
])

这假设存储的每条记录大约是1分钟的用户活动,并且您最关心的是每天的总时间,而不是最大连续时间(您的问题/预期结果暗示的情况)