我正在尝试使用$ group和$ project运算符的组合(除非有更好的替代方法)来生成两个值。
考虑如下所示的文档数据结构:
[
{
_id: 1,
openBalance: 22,
customerResponsible: true
},
{
_id: 2,
openBalance: 16,
customerResponsible: false
},
{
_id: 3,
openBalance: 10,
customerResponsible: true
},
{
_id: 4,
openBalance: 20,
customerResponsible: false
},
]
我要执行的操作是输出一个值为customerOpenBalance
的文档,该值代表“ customerResponsible”为true
的文档的全部openBalance。值agencyOpenBalance
代表openBalance总数,其中“ customerResponsible”设置为false
。
现在,我可以在$group
阶段执行此操作:
"customerResponsibleOpenBalance" : { "$sum" : { "$cond" : [ "$customerResponsibile", 1, 0 ] }},
然后在随后的$project
阶段执行此操作:
"customerResponsibleOpenBalance" : { "$sum": "$customerResponsibleOpenBalance" }
但这给了我$sum
中的instances
,而不是我真正想要的,它是{{1中找到的 values 的$ sum }},对于openBalance
,我要定位的布尔值customerResponsibleOpenBalance
是customerResponsible
。
如何调整聚合以获取true
中的$sum
而不是实例的$openBalance
?
我的完整聚合管道如下所示(关键阶段是第6阶段的$ group和第18阶段的$ project:
db.transactions.aggregate(
$sum
答案 0 :(得分:1)
对不起,最初我被您的样本数据误导了。现在,有了经过修改的问题和完整的流程,我认为您只需要更改
"customerResponsibleOpenBalance" : { "$sum" : { "$cond" : [ "$customerResponsibile", 1, 0 ] }}
到
"customerResponsibleOpenBalance" : { "$sum" : { "$cond" : [ "$customerResponsibile", "$openBalance", 0 ] }},