You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:12:02