【问题标题】:Can not get $sum in aggregate function in MongoDB无法在 MongoDB 的聚合函数中获取 $sum
【发布时间】:2016-11-16 20:54:27
【问题描述】:

这是我的数据格式:

"request" : {
    "_id" : 1003,
    "user" : {
        "username" : "",
        "password" : "",
        "_id" : 1111,
        "gender" : "male",
       },
    "request" : {
        "merchantid" : "TA456",
        "txnAmount" : 18000,
        "fee" :0,
        "IssuerID" : "18801111",
        "bankID" : "888888",
    }

},
 "confirmation" : true

}`

我无法通过“request.user._id”获得“request.request.txnAmount”组的总和。

这是我的查询:

db.getCollection('megabank_response').aggregate(
[ {        $group : {
           _id : "request.user._id",
           totalPrice: { $sum: "request.request.txnAmount"},
           count: { $sum: 1 }
        }
      }
   ])

并得到结果:

{
    "_id" : "request.user._id",
    "total Price" : 0,
    "count" : 4.0
}

谁能帮助我为什么我的查询无法计算总和?

【问题讨论】:

  • txnAmountString 转换它的数字,然后检查您的聚合查询
  • 我已经试过了,结果还是一样

标签: mongodb aggregation-framework


【解决方案1】:

您似乎缺少组聚合函数中的 $ 符号。

db.megabank_response.aggregate([{
  $group: {
    _id: "request.user._id",
    ss: {
      $sum: "request.request.txnAmount"
    }
  }
}]);

给:{ "_id" : "request.user._id", "ss" : 0 }

但正确答案是:

db.megabank_response.aggregate([{
  $group: {
    _id: "$request.user._id",
    ss: {
      $sum: "$request.request.txnAmount"
    }
  }
}]);

【讨论】:

  • 感谢您的回答。我现在才明白它是如何工作的
【解决方案2】:

我已经设法使用来自this source 的答案找出了查询。 但是,我的查询还是有点太乱了。有什么方法可以优化吗?

db.getCollection('megabank_response').aggregate([
 {
    "$match": {
        "request.user._id": 1111
    }
 },
   {  
     "$group":{
       _id : "request.user._id",
       totalPrice: { $sum: '$request.request.txnAmount'},
       count: { $sum: 1 }
   }
 }

])

结果:

{
"_id" : "request.user._id",
"totalPrice" : 62000,
"count" : 3.0

}

【讨论】:

    【解决方案3】:

    试试:

    db.getCollection('megabank_response').aggregate([{        
        $group: {
            _id : "request.user._id",
            totalPrice: { $sum: "$request.request.txnAmount"},
            count: { $sum: 1 }
        }
    }])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-03
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 2023-01-13
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多