【问题标题】:MongoDB aggregate to get statsMongoDB 聚合以获取统计信息
【发布时间】:2023-01-12 19:42:21
【问题描述】:

我去年某个时候做过这个,但现在我真的不记得也找不到任何有用的资源。 我想根据类型获取我的收藏的统计信息。

这是我的数据对象

{
  "_id": {
    "$oid": "63bfc374378c59a5328f229e"
  },
  "amountEarned": 11500,
  "amountPaid": 10350,
  "relianceCommission": 1150,
  "receiverType": "RESTAURANT",
  "__v": 0
}

我只需要每个receiverTypeamountPaid之和,它可以是STORERESTAURANTSHOPPER。然后我还需要所有的relianceCommission 的总和。导致形状像

{
 storeEarnings: 500,
 restaurantEarnings: 30,
 shopperEarnings: 40,
 totalRelianceCommission: 45
}

我试过了

aggregate([
  {
    $group: {_id: "$receiverType", total: {$sum: "amountPaid"}} 
}
])

然后加入另一个管道来计算totalRelianceCommission,但我觉得应该有一种更简洁的方法来做到这一点。我也不确定如何进行投影以产生所需的形状。请帮忙。

【问题讨论】:

    标签: mongodb statistics aggregation-framework group


    【解决方案1】:
    query:
     {
        $group: {
          _id: "$receiverType",
          total: {
            $sum: "$amountPaid"
          },
          commissions: {
            $sum: "$relianceCommission"
          }
        }
      }
    result:[
      {
        "_id": "STORE",
        "commissions": 1150,
        "total": 10350
      },
      {
        "_id": "RESTAURANT",
        "commissions": 2300,
        "total": 20700
      }
    ]
    
    loop through the array to get a sum of commissions
    

    【讨论】:

      【解决方案2】:

      你需要有条件的总和。

      db.collection.aggregate([
        {
          $group: {
            _id: null,
            storeEarnings: {
              $sum: {
                $cond: [{$eq: ["$receiverType","STORE"]},"$amountPaid",0]
              }
            },
            restaurantEarnings: {
              $sum: {
                $cond: [{$eq: ["$receiverType","RESTAURANT"]},"$amountPaid",0]
              }
            },
            shopperEarnings: {
              $sum: {
                $cond: [{$eq: ["$receiverType","SHOPPER"]},"$amountPaid",0]
              }
            },
            totalRelianceCommission: {
              $sum: "$relianceCommission"
            }
          }
        }
      ])
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        • 2010-12-18
        • 2021-08-28
        相关资源
        最近更新 更多