【问题标题】:Creating Aggregation Stage to Total Number of Open Transactions in MongoDB Collection为 MongoDB 集合中打开的事务总数创建聚合阶段
【发布时间】:2018-04-27 17:40:39
【问题描述】:

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

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

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

除此之外,我还想做的是确定在确定这个数字时使用了多少事务(即,确定给定的customer_id 有多少记录,其中transactions.amount.balance > 0

我试过这样做:

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

上述方法无效。所以我也尝试使用数组,如下所示:

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

也不行。

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

【问题讨论】:

    标签: javascript mongodb aggregation-framework


    【解决方案1】:

    您可以在$sum 中使用$cond 来做到这一点:

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

    【讨论】:

    • 非常感谢,@mickl。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2021-02-28
    • 1970-01-01
    • 2015-11-22
    • 2018-07-14
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多