MongoDB如何在单查询中实现debit总和减credit总和计算
MongoDB 收支差值统计实现方案
你可以通过MongoDB的聚合管道实现需求,以下是两种常用实现方式:
方案一:单轮分组统计(性能最优)
仅需一次遍历所有文档即可得到结果,适合数据量较大的场景:
// 替换collection为你的实际集合名 db.collection.aggregate([ { $group: { _id: null, total: { $sum: { $cond: [ { $eq: ["$type", "debit"] }, "$amount", { $multiply: ["$amount", -1] } ] } } } }, { $project: { _id: 0, result: "$total" } } ])
返回结果示例:
{ "result" : 25 }
方案二:分步统计(逻辑直观)
先分别统计两类金额总和再计算差值,方便后续调整统计规则:
// 替换collection为你的实际集合名 db.collection.aggregate([ // 第一步:按type分组统计各自总和 { $group: { _id: "$type", sumAmount: { $sum: "$amount" } } }, // 第二步:汇总两类总和 { $group: { _id: null, debitSum: { $sum: { $cond: [ { $eq: ["$_id", "debit"] }, "$sumAmount", 0 ] } }, creditSum: { $sum: { $cond: [ { $eq: ["$_id", "credit"] }, "$sumAmount", 0 ] } } } }, // 第三步:计算差值 { $project: { _id: 0, result: { $subtract: [ "$debitSum", "$creditSum" ] } } } ])
返回结果和方案一完全一致。
内容的提问来源于stack exchange,提问作者Bipa
相关产品推荐
相关产品推荐

