MongoDB Sum聚合查询无结果问题求助
问题分析与解决方案
首先看你的聚合管道存在两个关键问题,导致没有返回结果:
1. 管道阶段顺序错误
你把$match放在了$group之后,但分组操作完成后,输出的文档结构只有_id和total两个字段,根本不存在type和user_hash字段,所以后续的$match自然找不到符合条件的文档,返回空结果。
正确的逻辑应该是先过滤符合条件的文档,再对过滤后的结果进行分组求和,这样既高效又能得到正确结果。
2. $group的_id设置错误
你的预期结果是_id: null,但当前代码里用了_id: "$id",而你的示例文档里并没有id字段,只有_id;而且如果要把所有符合条件的文档合并成一个总和,应该把_id设为null,这样MongoDB会将所有匹配的文档归为一组计算总和。
修正后的聚合代码
db.activities.aggregate([ // 先过滤出指定用户的Expense类型活动 { $match: { type: "Expense", user_hash: "asdsc4be9fe7xxx" } }, // 对过滤后的所有文档分组,计算总金额 { $group: { _id: null, total: { $sum: "$amount" } } } ])
验证逻辑
- 第一步
$match会筛选出所有user_hash为asdsc4be9fe7xxx且type为Expense的文档; - 第二步
$group将这些筛选后的文档全部归为一组(_id: null),然后用$sum累加所有amount字段的值; - 最终会返回你预期的格式:
{ "_id" : null, "total" : xxxxx }(xxxxx为符合条件的金额总和)。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

