如何通过指定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
相关产品推荐
相关产品推荐

