【问题标题】:How to organize MongoDB data by time?如何按时间组织MongoDB数据?
【发布时间】:2016-04-26 23:31:42
【问题描述】:

我有一个应用程序每秒将数据保存到 MongoDB。这是重要的数据,但没有必要永远保持每一秒的数据。一段时间后,我想运行一个进程(后台工作人员)将这些数据清理为每小时块,其中包括当天每小时的每条数据(每秒 1 条)。有点像 Mac 上的 Time Machine。

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

  1. Mongo 聚合器(不确定具体如何工作)
  2. node后台进程用momentjs和按日期、小时等排序(真的很长)

使用 MongoDB 执行此操作的最佳方法是什么?

【问题讨论】:

    标签: node.js mongodb momentjs


    【解决方案1】:

    我认为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

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 2011-09-22
      相关资源
      最近更新 更多