У меня есть код этого агрегационного конвейера ниже, который я хотел бы запускать каждый день в году! По существу, вычисление минимальной, максимальной и средней температуры (поле «TEMP») для каждого дня года. На данный момент я назову этот фрагмент кода 365 раз, передавая дату начала и дату окончания дня.Конвейер агрегации MongoDB с петлей
Очевидно, что это очень неэффективно. Есть ли способ закодировать это в mongo, чтобы он быстрее и возвращал массив из 365 средних значений, 365 минут и 365 максимальных значений или что-то в этом роде. Im использует библиотеку часового пояса для получения даты начала и окончания.
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
OK Действительно, функция часового пояса пока не реализована. Трек: https://jira.mongodb.org/browse/SERVER-6310 Я думаю, что даже добавление смещения к запросу не сильно поможет из-за летнего сбережения и т. Д. – opcode