【发布时间】:2018-12-19 16:37:51
【问题描述】:
在我的 MongoDB 视图管道中的一个聚合阶段,我正在使用 $group。我在$group 阶段所做的其中一件事是总结openBalance,如下所示:
"openBalance": {
"$sum": "$openBalance"
},
这行得通。
但是,我还需要获取另一个值,它首先匹配一个条件,然后 然后 对数据求和。换句话说,是这样的:
"customerResponsibleOpenBalance": {
"$match": {
"customerResponsible": true
},
"$sum": "$openBalance"
},
但是,我不能在 $group 阶段这样做,因为它会导致此错误:
customerResponsibleOpenBalance必须指定一个累加器。
那么我将如何以不同的方式进行此操作? $facets 是我唯一的选择吗?
【问题讨论】:
-
$group 处理一组文档。为什么要使用
$match?这是否意味着“任何customerResponsible字段设置为true”? -
是的。那是正确的。这意味着,查看文档,如果字段
customerResponsible的值设置为 true,请将其包含在此处的$sum中。 -
您可以将 $sum 与 $cond 表达式一起使用。类似
{"$sum":{"$cond":["$customerResponsible","$openBalance",0]}}和{"$sum":{"$cond":["$customerResponsible",0, "$openBalance"]}} -
啊,好吧,这看起来是我想要完成的正确方法。
-
"customerResponsibleOpenBalance": { "$sum": {"$cond":["$customerResponsible","$openBalance", 0] } },
标签: javascript mongodb aggregation-framework