MongoDB聚合查询:未知球队字段值时统计同队两名球员平均跑动距离
解决方案
你可以通过以下聚合管道实现需求,无需提前预知二人所属球队:
db.matches.aggregate([ // 初步筛选同时包含两名目标球员的比赛,降低后续计算开销 { $match: { "players.name": { $all: ["Saka", "Aubameyang"] } } }, // 提取两名目标球员的完整数据 { $addFields: { targetPlayers: { $filter: { input: "$players", cond: { $in: ["$$this.name", ["Saka", "Aubameyang"]] } } } } }, // 校验两名球员是否属于同一球队 { $addFields: { isSameTeam: { $eq: [ { $arrayElemAt: ["$targetPlayers.team", 0] }, { $arrayElemAt: ["$targetPlayers.team", 1] } ] } } }, // 过滤掉二人不同队的无效比赛 { $match: { isSameTeam: true } }, // 拆分目标球员数组为独立文档 { $unwind: "$targetPlayers" }, // 计算所有符合条件的跑动距离平均值 { $group: { _id: null, avgDistanceRan: { $avg: "$targetPlayers.distanceRan" } } } ])
可选调整
如果需要分别统计两名球员各自同队出战时的平均跑动距离,只需将最后$group阶段的_id修改为$targetPlayers.name即可:
{ $group: { _id: "$targetPlayers.name", avgDistanceRan: { $avg: "$targetPlayers.distanceRan" } } }
内容的提问来源于stack exchange,提问作者DoHn
相关产品推荐
相关产品推荐

