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

MongoDB实现类SQL CTE/子查询效果:筛选汇总金额非零的发票明细文档

解决MongoDB聚合筛选非零Balance的问题

没问题,你只需要在现有的聚合管道里添加一个$match阶段,过滤掉Balance等于0的分组结果就可以了。完整的聚合查询代码如下:

db.Invoice_Details.aggregate([
  // 第一步:按InvoiceID分组计算总余额
  {
    $group: {
      _id: { InvoiceID: "$InvoiceID" },
      Balance: { $sum: "$TransactionAmount" }
    }
  },
  // 第二步:筛选出余额不为0的分组
  {
    $match: {
      Balance: { $ne: 0 }
    }
  }
])

简单解释下各阶段的作用:

  • $group阶段:这部分你已经写对了,它会把所有相同InvoiceID的文档归为一组,然后用$sum累加每组的TransactionAmount得到该Invoice的总余额Balance。
  • $match阶段:这里用MongoDB的$ne(不等于)操作符,只保留Balance不等于0的分组结果,正好符合你的需求。

如果之后你需要获取这些Invoice对应的原始文档详情(比如关联CustomerID、TransactionDate),可以考虑在$group阶段用$push保留原始字段,或者后续加$lookup关联,但就当前需求而言,上面的查询已经完全够用啦。

内容的提问来源于stack exchange,提问作者MillinMo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:04:03