2016-01-20 73 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