Mongo.返回父节点上的相关集合



假设这样一个猫鼬数据库模式,

const teacherSchema = new mongoose.Schema({
name: {type: String, required: true, trim: true},
})

const courseSchema = new mongoose.Schema({
name: {type: String, required: true, trim: true},
teacher: { type: 'ObjectId', ref: 'Teacher', required: true },
})

const studentSchema = new mongoose.Schema({
name: {type: String, required: true, trim: true},
course: { type: 'ObjectId', ref: 'Course', required: true },
})

const hobbySchema = new mongoose.Schema({
name: {type: String, required: true, trim: true},
student: { type: 'ObjectId', ref: 'Student', required: true },
})

如何查询和返回特定教师的数据,同时嵌套他们所教的课程、参加该课程的学生和他们的爱好?注意:我发现老师使用url参数(id)

{
_id: "61040a6dec6d054128fa8eae",
name: "John Doe",
others: ...,
courses: [
{
content: ...,
students: [
{
content: ....,
hobbies: [{
content:...
}
]
},
{...other students taking the course}
]
},
{...other subjects by John Doe}
]
}

您所需要的只是mongo aggregate来链接和获取不同模式的数据。

首先,引入一个连接所有模式的关系,就像你对ref所做的那样,我建议有一个usersSchema并引入userType字段,该字段标识用户类型(学生或教师),因此您可以取消teacherSchema和studentSchema

UserSchema.aggregate([
{
$match: { id: teacherId }
},
{
$lookup: {
from: "users",
localField: "students",
foreignField: "_id",
as: "students",
},
},
{
$lookup: {
from: "hobbies",
localField: "hobbyId",
foreignField: "_id",
as: "hobbies",
},
},
{
$lookup: {
from: "course",
localField: "courseId",
foreignField: "_id",
as: "courses",
},
},
{
$sort: {
createdAt: -1,
},
},
{
$unwind: "$users",
},
])
.then((data) => {
return data
})

最新更新