2014-01-17 28 views
14

這組如何將數據週報:MongoDB的組,每2周

transactions.aggregate({ 
    [ 
     {$match: {status: "committed"}}, 
     {$group: { 
      _id: { 
       $year: "$date",         
       $week: "$date"       
      }, 
      count: {$sum: 1}, 
      start_date: {$min: "$date"}, 
      end_date: {$max: "$date"}        
     }} 
    ] 
});  

的問題是,約每2周進行分組,並得到了怎麼算?

謝謝。

正確的方式,根據公認的答案

由於Mzzl,這適用於每2周進行分組。以下是完整版本。

db.transactions.aggregate([ 
    {$match: {status: "committed"}}, 
    {$project: { 
     twoweekperiod: { 
      $subtract: [ 
       {$week: "$date"}, {$mod: [{$week: "$date"}, 2] } 
      ] 
     }, 
     date:1, 
     status:1 
    }}, 
    {$group: { 
     _id: { 
      year: {$year: "$date"},         
      twoweek: "$twoweekperiod"      
     }, 
     count: {$sum: 1}, 
     start_date: {$min: "$date"}, 
     end_date: {$max: "$date"}        
    }} 
]) 
+0

什麼格式有你的日期字段? – rubenfa

+0

它是一個標準化的mongodb ISODate例如ISODate(「2013-12-25T17:00:00Z」)顯示時 –

回答

7

假設$ week包含週數,您可以創建一個「每兩週」的數字,然後按組數。嘗試是這樣的:

{ 
    $project: { 
     twoweekperiod: { 
      $subtract: [ 
       '$week', {$mod: ['$week', 2] } 
      ] 
     }, status:1, date:1, etc... 
    } 
} 

我不知道的方式做一個蒙戈查詢的整數除法,所以不是我從weeknumber減去weeknumber mod 2,得到了許多每隔一週,而不是改變每週。然後你可以嘗試按這個數字分組。

+0

這是有效的!非常感謝:D –