使用MongoDB中的嵌套值映射reduce



我有一个嵌套的计数器每小时数据结构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 : {}}]

相关内容

  • 没有找到相关文章

最新更新