2014-09-26 56 views
1

< < 好傢伙,的MapReduce與日期奇怪的行爲

我的Symfony2(所以主義)和MongoDB工作。我試圖按日期「分組」我的結果。 我發現了一個功能,但它的行爲很奇怪。

的代碼:

$qb = $this->dm->createQueryBuilder('Friends'); 
    $qb->map(new \MongoCode("function(){ 
       var date = this.creationDate; 
       date.setHours(0); 
       date.setMinutes(0); 
       date.setSeconds(0); 
       day = date.getDate(); 
       if(day < 10){ 
        day = '0'+day; 
       } 
       month = 1 + date.getMonth(); 
       if(month < 10){ 
        month = '0'+month; 
       } 
       day = day+'/'+month+'/'+date.getFullYear(); 
       emit(day, 1); 
    }")); 
    $qb->reduce(new \MongoCode("function(k, vals) { 
         var count = 0; 
         for(v in vals) { 
          count += 1; 
         }; 

         return count; 
        }" 
    )); 
    $qb->sort("creationDate","desc"); 

其結果是:

[timeMillis] => 96 [次] =>數組([輸入] => 2830 [發射] => 2830 [減少] => 74 [output] => 79)[ok] => 1))

輸入和th發射都很好。但我不明白爲什麼減少和輸出是不同的。 更多當我試圖對所有結果做循環時,總數是不同的。

感謝您

回答

0

我要修正

var count = 0; 
vals.forEach(function(v) { 
    count += v['count']; 
}); 

return {count: count}; 

更換地圖功能,並通過發出:

emit(date, { count: 1 }); 

感謝您的幫助!

0

我覺得減少功能應該是爲

$qb->reduce(new \MongoCode("function(k, vals) { 
        return Array.sum(vals); 
       }" 
));