【发布时间】:2014-02-15 05:52:12
【问题描述】:
我需要根据某个时间间隔汇总我的收藏。
如您所想,我不需要计算,例如我们每天的每小时。
我需要根据 30 分钟间隔(或任何其他时间间隔)进行汇总。可以说,第一个文档是在下午 3:45 创建的。然后在下午 3:45 到下午 4:15 之间创建了另外 5 个文档。 所以在这个时间间隔内,我有 6 个文档。所以 MapReduce 结果的第一个文档是计数为 6 的文档。
假设下一个文档是在下午 4:35 创建的广告,另外三个是在下午 4:40 创建的。
所以 MapReduce 结果的下一个文档是计数为 4 的文档。
等等……
目前我的地图功能是这样的:
var map = function() {
var key = {name: this.name, minute: this.timestamp.getMinutes()};
emit(key, {count: 1})
};
所以没什么特别的。目前我按分钟分组,这不是我最后想要的。在这里,我需要能够检查上述时间间隔,而不是分钟。
还有我的reduce函数:
var reduce = function(key, values)
{
var sum = 0;
values.forEach(function(value)
{
sum += value['count'];
});
return {count: sum};
};
这样的输出是这样的:
{
0: "{ "_id" : { "name" : "A" , "minute" : 11.0} , "value" : { "count" : 1.0}}",
1: "{ "_id" : { "name" : "B" , "minute" : 41.0} , "value" : { "count" : 6.0}}",
2: "{ "_id" : { "name" : "B" , "minute" : 42.0} , "value" : { "count" : 3.0}}",
3: "{ "_id" : { "name" : "C" , "minute" : 41.0} , "value" : { "count" : 2.0}}",
4: "{ "_id" : { "name" : "C" , "minute" : 42.0} , "value" : { "count" : 2.0}}",
5: "{ "_id" : { "name" : "D" , "minute" : 11.0} , "value" : { "count" : 1.0}}",
6: "{ "_id" : { "name" : "E" , "minute" : 16.0} , "value" : { "count" : 1.0}}"
}
所以它每分钟计算/聚合文档,但不是按我的自定义时间间隔。
对此有什么想法吗?
【问题讨论】:
标签: mongodb mapreduce aggregation-framework