You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合查询获取球员队友时results数组为空如何解决?

问题原因

  1. $lookup子查询的匹配逻辑错误:你在子 pipeline 中直接用$eq判断$teams.years和$$team_year相等,但是文档结构里teams.years是数组类型,而$$team_year是你提前$unwind得到的单个年份数值,数组和单个数值直接做相等判断永远不会成立,所以没有匹配到任何结果。
  2. 若不需要将查询的原球员本人计入队友列表,还需要额外加过滤条件排除原球员文档。

修改方案

把$lookup的子 pipeline 替换为筛选符合要求的球队记录即可,修改后的完整聚合语句如下:

db.Players.aggregate([
  {
    $match: {_id: "/players/c/cruzne02.shtml"}
  },
  {$unwind: "$teams"},
  {$unwind: "$teams.years"},
  {
    $lookup: {
      from: "Players",
      let: {team_name: "$teams.name", team_year: "$teams.years", original_player_id: "$_id"},
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [
                // 排除原球员本人,不需要的话可以删除这一行
                {$ne: ["$_id", "$$original_player_id"]},
                // 匹配存在对应球队+对应年份的球员
                {
                  $gt: [
                    {
                      $size: {
                        $filter: {
                          input: "$teams",
                          cond: {
                            $and: [
                              {$eq: ["$$this.name", "$$team_name"]},
                              {$in: ["$$team_year", "$$this.years"]}
                            ]
                          }
                        }
                      }
                    },
                    0
                  ]
                }
              ]
            }
          }
        }
      ],
      as: "results"
    }
  },
  {$unwind: {path: "$results", preserveNullAndEmptyArrays: true}},
  {
    $group: {
      _id: {team: "$teams.name", year: "$teams.years"},
      results: {$push: "$results"}
    }
  },
  {
    $project: {
      team: "$_id.team",
      year: "$_id.year",
      results: 1,
      _id: 0
    }
  }
]);

内容的提问来源于stack exchange,提问作者laneherby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:09:02