1. 程式人生 > >mongoDB 按照時間欄位分組 【24小時,周,月,年】

mongoDB 按照時間欄位分組 【24小時,周,月,年】

最近在做mongoDB的統計, 有需求是

按照一天24小時分組,

按照一週的7天分組, 

按照一個月30天分組,

按照一年12個月分組統計,

mongodb 入庫的時間欄位是 2016-12-12 這樣的字串格式,並沒有用mongodb的格式UTC,有時差問題. 

思路是,只能通過mongodb的 管道 進行層層篩選, 分組的時候使用mongodb的自帶函式,$substr 進行擷取進行分組.

db.advPlaysDetails.aggregate([  
    {  
        $match: {advId:"1"}  
    },  
    {  
        $match: {playTime:{$gt: "2016-11-29",$lt:"2016-11-31"  }}  
    },  
    {  
        $project :{new_time_stamp :{$substr :["$playTime",11,2]},"_id":0,playTimes:1,}  
          
    },  
    {  
      $group : {_id :"$new_time_stamp", playTimes : {$sum : "$playTimes"}}  
      
    }  
      
 ])

$substr 第一個引數 要切割的欄位, 第二個引數:從第幾個欄位開始切, 第三個欄位:切幾個.

至於統計出來, 比如,一週裡,可能有一兩天根本就沒有資料這種情況,可以實現弄一個7天的集合或者陣列,裡邊資料預設為0 或其他初始值. 至於一個月多少天,不能定死30,應該用Calendar自己去算.