使用$ sum和$ cond获取$ sum的值,而不是mongo中实例的和

时间:2018-07-11 19:29:59

标签: javascript mongodb aggregation-framework

我正在尝试使用$ 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,我要定位的布尔值customerResponsibleOpenBalancecustomerResponsible

如何调整聚合以获取true中的$sum而不是实例的$openBalance

我的完整聚合管道如下所示(关键阶段是第6阶段的$ group和第18阶段的$ project:

db.transactions.aggregate(

$sum

1 个答案:

答案 0 :(得分:1)

对不起,最初我被您的样本数据误导了。现在,有了经过修改的问题和完整的流程,我认为您只需要更改

"customerResponsibleOpenBalance" : { "$sum" : { "$cond" : [ "$customerResponsibile", 1, 0 ] }}

"customerResponsibleOpenBalance" : { "$sum" : { "$cond" : [ "$customerResponsibile", "$openBalance", 0 ] }},