mongoDB 按照時間欄位分組 【24小時,周,月,年】
阿新 • • 發佈:2019-01-25
最近在做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自己去算.