使用MongoDB查询计算各分支交易总额、交易数及金额占比
MongoDB按区域分组统计查询实现
需求说明
按orderarea字段分组统计各分支的订单总金额、交易总笔数,同时计算该分支总金额占全局总金额(固定为22000)的百分比。
实现查询语句
db.collection.aggregate([ // 拆分orders数组为单条订单记录 { $unwind: "$orders" }, // 按分支区域分组统计 { $group: { _id: "$orderarea", totalAmount: { $sum: "$orders.amount" }, countoftransaction: { $sum: 1 } } }, // 格式化输出字段,计算百分比 { $project: { _id: 0, // 分支名称作为键,总金额作为值,MongoDB 3.6及以上版本支持该动态字段写法 [$_id]: "$totalAmount", countoftransaction: 1, amountpercentage: { $concat: [ { $toString: { $round: [ { $multiply: [ { $divide: [ "$totalAmount", 22000 ] }, 100 ] }, 2 ] } }, "%" ] } } } ])
语句说明
$unwind操作:将每条文档中嵌套的orders数组拆分为独立的单订单文档,避免嵌套结构导致统计出错$group操作:以orderarea作为分组主键,用$sum累加所有订单的amount得到单分支总金额,同时计数得到该分支总交易笔数$project操作:自定义输出格式,通过数学运算得到占比后拼接百分号,最终输出和需求一致的结构- 若使用的MongoDB版本低于3.6不支持动态字段名,可直接保留
_id字段作为分支名称字段即可。
内容的提问来源于stack exchange,提问作者Jayven Javier
相关产品推荐
相关产品推荐

