基于MongoDB Lookup关联第三表,按导师ID查询对应学生
MongoDB 查询指定导师的所有学生
假设你的三个集合结构如下(实际结构不同的话,调整对应字段名即可):
- mentor:
{ _id: ObjectId("xxx"), name: "张导师", ... } - student:
{ _id: ObjectId("yyy"), name: "李学生", age: 20, ... } - mentor_students:
{ mentor_id: ObjectId("xxx"), student_id: ObjectId("yyy") }
你可以通过聚合管道实现需求,具体查询语句如下:
db.mentor_students.aggregate([ // 筛选目标导师的所有关联记录 { $match: { mentor_id: ObjectId("替换为实际导师ID") } }, // 关联student集合获取完整学生信息 { $lookup: { from: "student", localField: "student_id", foreignField: "_id", as: "student_detail" } }, // 展开学生信息数组(每条关联记录对应一个学生) { $unwind: "$student_detail" }, // 将学生信息作为根文档返回,去掉冗余字段 { $replaceRoot: { newRoot: "$student_detail" } } ])
语句说明:
$match:先从关联表中过滤出指定导师的学生ID关联记录,减少后续处理的数据量。$lookup:类似SQL的JOIN操作,根据student_id关联student集合,把学生详情存入student_detail数组。$unwind:将$lookup返回的数组展开为单个文档,方便后续整理结果。$replaceRoot:把学生详情文档作为结果的根文档,直接返回干净的学生列表。
如果你的导师ID是字符串类型(非ObjectId),只需把ObjectId("xxx")替换为对应字符串即可,比如mentor_id: "123456"。
内容的提问来源于stack exchange,提问作者techy-coder
相关产品推荐
相关产品推荐

