在一个小型测试网站上,我想记录用户每天主动花在某些链接组上的大致时间段。 至少在任何用户点击我保存这样的文件:
示例文件:
{
"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"}
问题:这有可能,如果,如何?
提前感谢您的帮助!
莫夫
答案 0 :(得分:1)
聚合框架可以为您提供预期的答案:
db.times.aggregate([
{$group: {_id: '$routegroup', timeTotal: {$sum : 1}}},
{$project: {_id: 0, routegroup: '$_id', timeTotal: 1}}
])
这假设存储的每条记录大约是1分钟的用户活动,并且您最关心的是每天的总时间,而不是最大连续时间(您的问题/预期结果暗示的情况)