如何按时组织MongoDB数据?

时间:2016-01-20 22:08:40

标签: node.js mongodb momentjs

我有一个应用程序,每秒都会将数据保存到MongoDB。这是重要的数据,但不需要每秒保持数据。过了一段时间,我想运行一个进程(后台工作者)将这些数据清理成每小时的块,其中包括当天每小时的每一个数据(每秒1个)。有点像Time Machine在Mac上运行。

通过研究和思考,我可以想到几种方法可以实现这一目标:

  1. Mongo聚合器(不确定这是如何工作的)
  2. 使用momentjs节点后台进程并按日期,小时等排序(非常长时间)
  3. 使用MongoDB执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分: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