MongoDB带distinct条件的$sum聚合:按唯一赛事统计战队各地图总胜场
修正方案
你当前的聚合逻辑直接按战队+地图分组后累加win值,同一场赛事下的多名玩家数据会被重复计数,需要先按【战队+地图+赛事ID】维度去重,确保每场赛事仅统计一次胜场值,再聚合计算总胜场。
修正后的聚合查询如下:
let teamWinsOnMap = await PlayerStats.aggregate([ // 第一轮分组:按战队+地图+赛事ID合并数据,单场赛事仅保留一条记录 { $group: { _id: { team: "$team", map: "$map", match: "$match" }, win: { $first: "$win" }, team: { $first: "$team" }, map: { $first: "$map" } } }, // 第二轮分组:按战队+地图维度聚合,统计总胜场 { $group: { _id: { team: "$team", map: "$map" }, match: { $addToSet: "$_id.match" }, team: { $first: "$team" }, map: { $first: "$map" }, win: { $sum: "$win" } } } ])
运行后你案例里的de_dust2地图胜场会从错误的2修正为正确的1,匹配实际参赛场次。
内容的提问来源于stack exchange,提问作者mustafa.shykh
相关产品推荐
相关产品推荐

