[英]MongoDB Aggregation to conditionally update usernames in all of the collection with large number of documents
[英]Aggregation performance on large collection in MongoDB
我在 mongodb 中有一个很大的集合。 它在该集合中有大约 70-8000 万份文件。 但是当我在其上运行聚合管道时,返回结果需要将近 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 }
}
谢谢您的帮助。
对此的两种选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.