2015-12-21 137 views
0

我有一个嵌套的每小时数据结构的计数器http://pastebin.com/KgbsYBW7。嵌套级别的计数是恒定的,但值可以不同或相似。但是如果我运行地图功能:MongoDB中嵌套值的映射减少

function() { emit(this.date, this.data); } 

然后并非所有日期值的条目都减少了。 如果我使用:

function() { emit(this.hour, this.data); } 

然后所有的行减少。 我知道,该地图减少与类似的数据工作,但如何通过“日期”聚合我的条目?

回答

0

对于正确的结果,命令的MapReduce排序 PARAM被执行,因为映射值可以发送到降低功能分离:

分拣前

{ ISODate("2015-12-17T00:00:00Z") } => [ { data : {}}, { data : {}}] 
{ ISODate("2015-12-18T00:00:00Z") } => [ { data : {}}}] 
{ ISODate("2015-12-17T00:00:00Z") } => [ { data : {}}, { data : {}}, { data : {}}] 
{ ISODate("2015-12-19T00:00:00Z") } => [ { data : {}}] 

随着排序 {排序:{小时:1}}

{ ISODate("2015-12-17T00:00:00Z") } => [ { data : {}}, { data : {}},{ data : {}}, { data : {}}, { data : {}}] 
{ ISODate("2015-12-18T00:00:00Z") } => [ { data : {}}}] 
{ ISODate("2015-12-19T00:00:00Z") } => [ { data : {}}] 
0

如果您想在一天之内减少数据量,则需要设置当天的同一时间。

你可以这样说:

function() { 
    var date = new Date(this.date.getFullYear(), this.date.getMonth(), this.date.getDate()); 
    emit(date, this.data); 
} 
+0

我需要聚合用于任何范围内的日期数据。 – mcuw

+0

所以你有date_from,date_to,并希望在日期范围[date_from,date_to]中查看每天的汇总结果。这是对的吗? –

+0

是的,我使用带有日期范围的$ gte/$ lte的地图缩减查询 – mcuw