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

如何通过指定id在MongoDB中获取同球员的所有关联条目

MongoDB 根据球衣ID获取对应球员的所有条目

现有数据

[
  {_id: '62ecdf342f1193134043964c', id: '12', player: 'David Beckham', team: 'Manchester United'},
  {_id: '62ecdf342f1193134043965c', id: '17', player: 'Cristiano Rolando', team: 'Manchester United'},
  {_id: '62ecdf342f1193134043966c', id: '22', player: 'Cristiano Rolando', team: 'Juventus'},
  {_id: '62ecdf342f1193134043967c', id: '42', player: 'David Beckham', team: 'Real Madrid'},
]

需求说明

已知一个球衣id值,需要先找到该id对应的球员姓名,再检索所有属于该球员的条目并返回完整列表。例如:输入id=12,需返回David Beckham的两条记录。

当前代码

export async function getStaticProps({ params }) {
  const { db } = await connectToDatabase();
  const jerseyA = await db
    .collection("Jerseys")
    .find({ id: params.jersey })
    .sort()
    .toArray();
  const jersey = JSON.parse(JSON.stringify(jerseyA))[0];
  return { props: { jersey } };
}

解决方案

你可以在现有代码基础上增加一步查询:先获取指定id对应的球员姓名,再用该姓名查询所有匹配的条目。同时建议增加空值判断,避免未找到对应id时出现报错。

修改后的代码如下:

export async function getStaticProps({ params }) {
  const { db } = await connectToDatabase();
  
  // 第一步:获取指定id的球衣条目
  const jerseyA = await db
    .collection("Jerseys")
    .find({ id: params.jersey })
    .toArray();
  const jersey = JSON.parse(JSON.stringify(jerseyA))[0];

  // 第二步:如果找到该条目,查询对应球员的所有记录
  let playerJerseys = [];
  if (jersey?.player) {
    playerJerseys = await db
      .collection("Jerseys")
      .find({ player: jersey.player })
      .sort({ team: 1 }) // 可选:按球队排序,提升结果可读性
      .toArray();
    playerJerseys = JSON.parse(JSON.stringify(playerJerseys));
  }

  return { props: { jersey, playerJerseys } };
}

代码说明

  • 先通过params.jersey定位目标球衣条目,提取球员姓名
  • 用jersey?.player做空值判断,防止因未找到对应id导致后续查询报错
  • 通过find({ player: jersey.player })获取该球员的所有球衣记录
  • 可选添加sort方法对结果排序,让返回的列表更规整

内容的提问来源于stack exchange,提问作者Alexander Gavrailov Live

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:24:47