创建聚合阶段到MongoDB集合中的打开事务总数

时间:2018-04-27 17:40:39

标签: javascript mongodb aggregation-framework

我在MongoDB聚合管道中使用的其中一个步骤如下:

{
  $group: {
    "_id": "$customer._id",
    "totalBalance": {
      "$sum": "$transactions.amounts.balance"
    }
  }
}

这是按预期工作的。它总结了transactions.amounts.balance的数值,并给出了总金额。

除此之外我还想做的是确定在确定此数字时使用了多少交易(即,确定customer_id中给定transactions.amount.balance > 0的记录数量。{{1} }。

我试过这样做:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": {
      "$sum": { "$transactions.amounts.balance" : $gt: 0 }
    }
  }
}

以上都没有奏效。所以我也尝试使用一个数组,如下所示:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": {
      "$sum": [{ "$transactions.amounts.balance" : $gt: 0 }]
    }
  }
}

也不起作用。

$sum可以像这样使用吗?或者我需要以不同的方式处理这个特定的聚合阶段吗?

1 个答案:

答案 0 :(得分:2)

您可以使用$sum内的$cond来执行此操作:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": { $sum: { $cond: { if: { $gt: ["$transactions.amounts.balance", 0] }, then: 1, else: 0 } } }
  }
}