javascript - 如何在 MongoDB 聚合中进行 $match 然后在 $group 阶段进行累加

标签 javascript mongodb aggregation-framework

在我的 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/

相关文章:

javascript - 尝试让两个同时操纵杆处理触摸事件

javascript - 带有标志的 Html 国家/地区列表

java - Spring数据MongoTemplate更新嵌套数组失败

java - 代码升级之间的 Mongodb 和 java 数据版本控制

mongodb - 使用其他字段值访问随机字段

node.js - MongoDB 请求 : Filter only specific field from embedded documents in embedded array

mongodb - 计算年、月、日的日期差异

javascript - 检查空 map

javascript - 如何在 jQuery Mobile 多页面模板结构中将第二页显示为默认页面?