2016-01-20 74 views
0

我有一個應用程序,它將數據每秒保存到MongoDB。這是重要的數據,但每秒永遠保存數據不是必需的。一段時間後,我想運行一個進程(後臺工作人員)將這些數據清理成小時數據塊,其中包括當天每個小時的每個數據段(每秒1個)。有點像Time Machine在Mac上。如何按時間組織MongoDB數據?

從研究和思考,有一對夫婦的方法,我能想到的,我可以做到這一點有:

  1. 蒙戈聚合(不知道到底如何做到這一點的工作)
  2. 節點的後臺進程隨着時間的推移和按日期,小時等排序(真的很長時間)

什麼是最好的方式來做到這一點與MongoDB?

回答

0

我認爲Date Aggregation Operators可能是更好的選擇你的情況。鑑於您的架構如下

var dataSchema = new Schema({ 
    // other fields are here... 
    updated: Date, 
}); 
var Data = mongoose.model('Data', dataSchema); 

只是將這些數據保存爲正常日期。

然後你就可以通過檢索aggregate operation in mongoose每小時塊,一個示例代碼一樣,

MyModel.aggregate([ 
      {$match: {$and: [{updated: {$gte: start_date_hour}}, {updated: {$lte: end_date_hour}}]}}, 
      {$group: { 
       _id: { 
        year: {$year: "$updated"}, 
        month: {$month: "$updated"}, 
        day: {$dayOfMonth: "$updated"} 
        // other fields should be here to meet your requirement 
       }, 
      }}, 
      {$sort: {"date.year":1, "date.month":1, "date.day":1}} 
     ], callback); 

對於aggregate更多的參數,請參閱本doc