在MongoDB视图管道中的一个聚合阶段,我正在使用$group
。在该$group
阶段中,我正在做的一件事是总结一个openBalance
,如下所示:
"openBalance": {
"$sum": "$openBalance"
},
这有效。
但是,我还需要获取另一个值,该值首先与条件匹配,然后然后对数据求和。换句话说,是这样的:
"customerResponsibleOpenBalance": {
"$match": {
"customerResponsible": true
},
"$sum": "$openBalance"
},
但是,我不能在$group
阶段这样做,因为它会导致此错误:
customerResponsibleOpenBalance
必须指定一个累加器。
那么我将如何以不同的方式去做呢? $facets
是我唯一的选择吗?
答案 0 :(得分:1)
$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 } } }
}
}