在我的 MongoDB View 管道中的一个聚合阶段,我使用 $group
。我正在做的事情之一 $group
舞台正在总结openBalance
,像这样:
"openBalance": {
"$sum": "$openBalance"
},
这有效。
但是,我还需要获取另一个值,该值首先与条件匹配,然后对数据求和。换句话说,像这样:
"customerResponsibleOpenBalance": {
"$match": {
"customerResponsible": true
},
"$sum": "$openBalance"
},
但是,我不能在 $group
内这样做阶段,因为它会导致此错误:
customerResponsibleOpenBalance
must specify one accumulator.
那么我该如何以不同的方式做到这一点呢?是$facets
我在这里唯一的选择?
最佳答案
$group
适用于一组文档,因此您只能使用累加器来获取结果。要有条件地获取 $sum
您可以使用 $cond其内部的运算符,如果没有匹配则添加 0
:
{
$group: {
_id: null,
balanceForTrue: { $sum: { $cond: { if: { $eq: [ "$customerResponsible", true ] }, then: "$balance", else: 0 } } },
balanceForFalse: { $sum: { $cond: { if: { $eq: [ "$customerResponsible", false ] }, then: "$balance", else: 0 } } }
}
}
关于javascript - 如何在 MongoDB 聚合中进行 $match 然后在 $group 阶段进行累加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51288836/