У меня есть коллекция, которая содержит полмиллиона данных, и я хочу получить среднее значение для всех месяцев между датой, которую я ввожу. Сейчас я получаю данные за весь год, но я хочу, чтобы они были разделены на один месяц, т.е. на 12 диапазонов данных за каждый месяц.
Ниже приведен конвейер агрегации, который я использую.
let filter = 'y';
const date = new Date();
let checkDate = moment().subtract(1.5, 'years')._d;
MeterData.aggregate([
{
$group: {
_id: "$meter_id",
// total: { $sum: 1 },
totalEnergy: filter !== 'a' ? {
$sum: {
$toDouble: {
$cond: {
if: {
$gte: [
"$date", checkDate
]
},
then: "$energy.Energy",
else: 0
}
}
}
} : { $sum: { $toDouble:
"$energy.Energy"
} }
},
}
]);
Здесь я получаю totalEnergy за весь год, в поле totalEnergy, но теперь я хочу, чтобы totalEnergy плюс ежемесячные вычисления для года, в который я вхожу , Любая идея о том, как это сделать. ?
Ниже приведен пример документа из коллекции.
{"_id":{"$oid":"5e557779ed588826d84cef11"},
"meter_id":"1001",
"date":{"$date":{"$numberLong":"1509474600000"}},
"parameter_name":"hvac","voltage":{"unit":"V"},
"current":{"unit":"AMP"},
"powerFactor":{"unit":"phi"},
"angle":{"unit":"degree"},
"activePower":{"unit":"kwh"},
"reactivePower":{"unit":"kwh"},
"apparentPower":{"unit":"kwh"},
"frequency":{"unit":"hz"},
"thd":{"unit":"percentage"},
"energy":{"Energy":"5.7"},
"power":{"unit":"watt"},
Согласно предложению Райана Ганнера, я получил ответ, который вставляю ниже, у меня просто есть еще одна проблема.
[
{
meter_id: '1001',
month: '2017-10',
totalEnergy: 0,
averageEnergy: 0
} + 11 more months......
]
Теперь мне нужно общее количество энергии за 12 месяцев. Например, итоговое поле totalEnergy за все 12 месяцев в одной переменной.