gpt4 book ai didi

node.js - 带循环的 Mongodb 聚合管道

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:37 25 4
gpt4 key购买 nike

我有一个包含 50 万数据的集合,我想要输入日期之间所有月份的平均值。现在我正在获取全年的数据,但我希望将其按单月分隔,即每个月有 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"},

根据 Ryan Gunner 的建议,我得到了答案,并将其粘贴在下面,但我还有一个问题。

[
{
meter_id: '1001',
month: '2017-10',
totalEnergy: 0,
averageEnergy: 0
} + 11 more months......
]

现在我需要的是12个月的能量总量。例如,单个变量中所有 12 个月的总能量字段总数。

最佳答案

像这样怎么样?

var startDate = new ISODate('2020-04-01');
var endDate = new ISODate('2019-04-01');

db.collection.aggregate(
{
$match: {
$expr: {
$and: [
{ $gt: ['$date', endDate] },
{ $lt: ['$date', startDate] }]
}
}
},
{
$group: {
_id: {
meter: '$meter_id',
month: { $dateToString: { format: '%Y-%m', date: '$date' } }

},
totalEnergy: { $sum: { $toDouble: '$energy.Energy' } },
averageEnergy: { $avg: { $toDouble: '$energy.Energy' } }
}
},
{
$project: {
meter_id: '$_id.meter',
month: '$_id.month',
totalEnergy: '$totalEnergy',
averageEnergy: '$averageEnergy',
_id: 0

}

},
{
$sort: { meter_id: 1 }
}
{
$group: {
_id: null,
grandTotalEnergy: { $sum: '$totalEnergy' },
monthlyData: { $push: '$$ROOT' }
}
},
{ $project: { _id: 0 } }
)

更新:添加了 grandTotalEnergy 字段并将monthlyData 推送到数组。

关于node.js - 带循环的 Mongodb 聚合管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60499337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com