我需要计算一组文档的加权平均值。每个文档都在单独的字段中包含权重和值。这是一个示例:我有以下 2 个代表销售交易的文档。
{
quantity : 3,
price : 2
}
{
quantity : 9,
price : 6
}
我想找到两笔交易的平均价格。这是一个加权平均值,其中重量是数量,价值是价格。这可以通过计算
AveragePrice = (3 * 2 + 9 * 6 ) / (3 + 9)
.
如何使用聚合框架执行此计算?
我需要计算一组文档的加权平均值。每个文档都在单独的字段中包含权重和值。这是一个示例:我有以下 2 个代表销售交易的文档。
{
quantity : 3,
price : 2
}
{
quantity : 9,
price : 6
}
我想找到两笔交易的平均价格。这是一个加权平均值,其中重量是数量,价值是价格。这可以通过计算
AveragePrice = (3 * 2 + 9 * 6 ) / (3 + 9)
.
如何使用聚合框架执行此计算?
为此,您应首先计算所得比率的分子(加权总和)和分母(加权总和)。之后,您只需要一个一个地划分:
db.collection.aggregate({
$group : {
_id : 'weighted average', // build any group key ypo need
numerator: { $sum: { $multiply: [ "$price", "$quantity" ] } },
denominator: { $sum: "$quantity" }
}
}, {
$project: {
average: { $divide: [ "$numerator", "$denominator" ] }
}
})
有关详细信息,请参阅聚合管道文档。