Node.js 如何按时间组织MongoDB数据?

Node.js 如何按时间组织MongoDB数据?,node.js,mongodb,momentjs,Node.js,Mongodb,Momentjs,我有一个应用程序,它每秒都将数据保存到MongoDB。这是重要的数据,但不需要永远每秒钟保存一次数据。过了一段时间,我想运行一个进程(后台工作人员)将这些数据清理成每小时一次的数据块,其中包括当天每小时的每一段数据(每秒1条)。有点像Mac上的时间机器 通过研究和思考,我可以想出几种方法来实现这一目标: Mongo聚合器(不确定该如何工作) 节点后台进程,使用momentjs并按日期、小时等排序(非常长的时间) 使用MongoDB的最佳方式是什么?我认为对于您的情况,这可能是更好的选择。给出你的

我有一个应用程序,它每秒都将数据保存到MongoDB。这是重要的数据,但不需要永远每秒钟保存一次数据。过了一段时间,我想运行一个进程(后台工作人员)将这些数据清理成每小时一次的数据块,其中包括当天每小时的每一段数据(每秒1条)。有点像Mac上的时间机器

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

  • Mongo聚合器(不确定该如何工作)
  • 节点后台进程,使用momentjs并按日期、小时等排序(非常长的时间)
  • 使用MongoDB的最佳方式是什么?

    我认为对于您的情况,这可能是更好的选择。给出你的模式如下

    var dataSchema = new Schema({
      // other fields are here...
      updated: Date,
    });
    var Data = mongoose.model('Data', dataSchema );
    
    只需将这些数据保存为正常日期

    然后您可以通过一个示例代码检索每小时的数据块

    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);
    
    有关聚合的更多参数,请参阅此