Node.js 如何按时间组织MongoDB数据?
我有一个应用程序,它每秒都将数据保存到MongoDB。这是重要的数据,但不需要永远每秒钟保存一次数据。过了一段时间,我想运行一个进程(后台工作人员)将这些数据清理成每小时一次的数据块,其中包括当天每小时的每一段数据(每秒1条)。有点像Mac上的时间机器 通过研究和思考,我可以想出几种方法来实现这一目标:Node.js 如何按时间组织MongoDB数据?,node.js,mongodb,momentjs,Node.js,Mongodb,Momentjs,我有一个应用程序,它每秒都将数据保存到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);
有关聚合的更多参数,请参阅此