2015-12-21 118 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