我有一个嵌套的计数器每小时数据结构http://pastebin.com/KgbsYBW7.嵌套级别的计数是恒定的,但值可以不同或相似。但如果我运行地图功能:
function () { emit(this.date, this.data); }
那么并不是所有日期值的条目都减少了。如果我使用:
function () { emit(this.hour, this.data); }
然后所有的行都减少了。我知道,该地图减少了对类似数据的处理,但如何按"日期"聚合我的条目?
如果你想减少一天的数据,你需要为这一天设置相同的时间。
你可以这样做:
function () {
var date = new Date(this.date.getFullYear(), this.date.getMonth(), this.date.getDate());
emit(date, this.data);
}
为了获得正确的结果,命令mapReduce应使用sortparam执行,因为映射值可能会发送到reduce函数分隔:
排序前
{ 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 : {}}]
使用排序{sort:{hour: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 : {}}]