我有這個聚合管道代碼下面,我想運行一年中的每一天!基本上計算一年中每一天的最低,最高和平均溫度(「TEMP」字段)。目前我正在調用這段代碼365次,通過一天的開始日期和結束日期。MongoDB聚合管道與循環
顯然這是非常低效的。有沒有什麼辦法可以在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")}
....
任何想法?也許我們可以在聚合管道中傳遞一年中所有日子的所有時間戳?
謝謝!
嗨尼爾,謝謝!關於時區會發生什麼?如果我使用內置$ dayOfMonth,$ week運算符,是否有調整時區的最佳做法? – opcode 2014-10-29 18:35:15
確實時區功能尚未實現。跟蹤:https://jira.mongodb.org/browse/SERVER-6310 我猜即使增加一個偏移量的查詢將不會有太大的幫助,由於夏令時等。 – opcode 2014-10-30 01:32:44