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
相关产品推荐
相关产品推荐

