我有以下聚合,并希望将其用于我的Spring-Project,在那里我使用SpringData。 聚合如下所示:
db.collection.aggregate({
$group : {
_id : 'weighted average',
numerator: { $sum: { $multiply: [ "a", "b"] } },
denominator: { $sum: "a" }
}
}, {
$project: {
average: { $divide: [ "$numerator", "$denominator" ] }
}
})
总结一下:我想以分子的形式计算多次乘法的总和:例如 a1*b1 + a2*b2 + ....=? 作为分母,我想要一个所有 a 的总和,例如 a1+a2+a3+a4+...=? 然后我也想把分子和分母除。
提前谢谢你。
以下是 spring data mongdb 聚合代码
List<AggregationOperation> stages = new ArrayList<>();
Multiply multiplyOp = ArithmeticOperators
.valueOf("$a").multiplyBy("$b");
GroupOperation groupOperation = group(Aggregation.fields("_id")).sum(multiplyOp).as("numerator").sum("a").as("denominator")
Divide divideOp = ArithmeticOperators.valueOf("$numerator")
.divideBy("$denominator");
ProjectOperation projectOperation = project().and(divideOp).as("average");
stages.add(groupOperation);
stages.add(projectOperation);
newAggregation(stages);