MongoDB聚合查询求和返回0,如何修正获取正确成功支付总额?
解决MongoDB聚合求和返回0的问题
你的聚合查询返回0的核心原因是嵌套字段引用格式错误:在$sum操作符中,引用嵌套字段时必须在字段路径前添加$符号,否则MongoDB会将字符串"requestPayload.amount"当作数值0处理,最终总和自然为0。
修正后的单个用户统计查询
移除多余的$and(MongoDB默认对多个查询条件做逻辑与),并修正字段引用格式:
db.paymentLogDetail.aggregate([ { "$match": { "userName": "merch2@mail.com", "response.code": 200 } }, { "$group": { "_id": null, "total": { "$sum": "$requestPayload.amount" } } } ]);
支持任意用户名的扩展方案
场景1:动态统计指定单个用户
在应用代码中动态替换"merch2@mail.com"为目标用户名即可,查询结构保持不变。
场景2:统计所有用户各自的成功支付总和
将$group的_id设置为"$userName",按用户名分组求和:
db.paymentLogDetail.aggregate([ { "$match": { "response.code": 200 } }, { "$group": { "_id": "$userName", "totalSuccessAmount": { "$sum": "$requestPayload.amount" } } } ]);
内容的提问来源于stack exchange,提问作者JPG
相关产品推荐
相关产品推荐

