У меня большая коллекция в mongodb. В этой коллекции около 70-80 миллионов документов. Но когда я запускаю конвейер агрегации, для возврата результатов требуется почти 5 минут. Можно ли как-нибудь уменьшить время результата агрегации?
Я не могу найти какое-либо соответствующее решение для сокращения времени на конвейер агрегации.
Ниже приведен пример документа.
{
"data": {
"_id": "5e557779ed588826d84cef27",
"meter_id": "1001",
"date": "2017-10-31T18:52:00.000Z",
"parameter_name": "hvac",
"voltage": {
"unit": "V",
"Voltage": 0
},
"current": {
"unit": "AMP",
"Current": 0
},
"powerFactor": {
"unit": "phi",
"PowerFactor": 0
},
"angle": {
"unit": "degree"
},
"activePower": {
"unit": "kwh"
},
"reactivePower": {
"unit": "kwh"
},
"apparentPower": {
"unit": "kwh",
"ApparentPower": 0
},
"frequency": {
"unit": "hz",
"Frequency": 0
},
"thd": {
"unit": "percentage"
},
"energy": {
"unit": "J",
"Energy": 0
},
"power": {
"unit": "watt",
"Power": 0
},
"__v": 0
}
}
А ниже - конвейер агрегации, который я использую
MeterData.aggregate([
{
$match: {
$expr: {
$and: [
{$gt: ["$date", checkDate] },
{ $lt: ["$date", moment(checkDate).add(1, 'years')._d] },
]
}
}
},
{
$group: {
_id: {
day: { $dateToString: { format: "%Y-%m", date: "$date" } },
meter: '$meter_id'
},
totalEnergy: { $sum: { $toDouble: "$energy.Energy" } },
}
},
{
$project: {
meter_id: '$_id.meter',
month: '$_id.day',
totalEnergy: '$totalEnergy',
_id: 0
}
},
{
$sort: { month: 1 }
}
Спасибо за помощь.