Он получился вот таким:
// Получить заданное время от текущей даты в MS
const timeRange = (ms = 0) => Math.round(new Date().getTime() / 1000) + 10800 - ms;
// Получить средние значения за неделю от текущего времени (GET)
exports.dailyAverages = function(cb) {
db.get().collection(config.collectionConnect).aggregate([
// Сортировка записей по времени
{ $match:
{
Date: { $gte: timeRange(604800), $lt: timeRange() }
}
},
// Агрегация найденных записей
// и вычисление средних значений
{ $group:
{
_id: null,
LastTimeUpdate: { $max: "$Date" },
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}
},
// Округление средних значений
{ $project:
{
_id: null,
LastTimeUpdate: 1,
Temperature: { $round: ["$Temperature", 1] },
Pressure: { $round: ["$Pressure", 1] }
}
},
// Удаление лишних полей из объекта
{ $project:
{
_id: 0,
Date: 0,
City: 0,
Street: 0
}
}
]).next(function(err, doc) {
cb(err, doc);
});
};
Подскажите пожалуйста, можно ещё что-нибудь в нём поправить / оптимизировать?
Например убрать юзлесс комменты каждые 2 строки, и юзать промисы/асинк-авайт вместо колбеков
Обсуждают сегодня