【发布时间】:2014-10-29 10:59:01
【问题描述】:
下面有这个聚合管道代码,我希望一年中的每一天都运行它!基本上计算一年中每一天的最低、最高和平均温度(“TEMP”字段)。目前我正在调用这段代码 365 次,传递一天的开始日期和结束日期。
显然这是非常低效的。有没有办法在 mongo 中循环它,以便它更快,并返回一个包含 365 个平均值、365 个最小值和 365 个最大值或类似的东西的数组。我使用时区库来导出开始日期和结束日期。
collection.aggregate([
{
$match:{$and:[
{"UID" : uid},
{"TEMP" :{$exists:true}}
{"site" : "SITE123"},
{"updatedAt": {$gte : new Date(START_DATE_ARG), $lte : new Date(END_DATE_ARG)} }
]}
},
{ "$group": {
"_id": "$UID",
"avg": { $avg: $TEMP },
"min": { $min: $TEMP },
"max": { $max: $TEMP }
}
}
], function(err, result){
if (err){
cb(1, err);
}
else{
cb(0, result);
}
});
});
数据集如下所示
....
{UID: "123", TEMP: 11, site: "SITE123", updatedAt: ISODate("2014-09-12T21:55:19.326Z")}
{UID: "123", TEMP: 10, site: "SITE123", updatedAt: ISODate("2014-09-12T21:55:20.491Z")}
....
有什么想法吗?也许我们可以在聚合管道中传递一年中所有日子的所有时间戳?
谢谢!!
【问题讨论】:
标签: node.js mongodb mongodb-query aggregation-framework