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

Javascript 为MongoDB集合中打开的事务总数创建聚合阶段,javascript,mongodb,aggregation-framework,Javascript,Mongodb,Aggregation Framework,我在MongoDB聚合管道中使用的一个步骤如下所示: { $group: { "_id": "$customer._id", "totalBalance": { "$sum": "$transactions.amounts.balance" } } } { $group: { "_id": "$customer._id", "totalOpenTransactions": { "$sum": [{ "$transact

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

{
  $group: {
    "_id": "$customer._id",
    "totalBalance": {
      "$sum": "$transactions.amounts.balance"
    }
  }
}
{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": {
      "$sum": [{ "$transactions.amounts.balance" : $gt: 0 }]
    }
  }
}
这是预期的工作。它汇总了
事务处理.amounts.balance
的数值,并给出了总美元金额

除此之外,我想做的是确定在确定该数字时使用了多少笔交易(即,确定给定的
客户id
有多少条记录,其中
transactions.amount.balance>0

我试过这样做:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": {
      "$sum": { "$transactions.amounts.balance" : $gt: 0 }
    }
  }
}
上述方法不起作用。因此我还尝试使用数组,如下所示:

{
  $group: {
    "_id": "$customer._id",
    "totalBalance": {
      "$sum": "$transactions.amounts.balance"
    }
  }
}
{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": {
      "$sum": [{ "$transactions.amounts.balance" : $gt: 0 }]
    }
  }
}
也不起作用

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

您可以在
$sum
中使用:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": { $sum: { $cond: { if: { $gt: ["$transactions.amounts.balance", 0] }, then: 1, else: 0 } } }
  }
}
您可以使用inside
$sum
来执行此操作:

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

非常感谢,@mickl。非常感谢,@mickl。