【发布时间】:2021-06-06 10:54:08
【问题描述】:
假设我有一个如下所示的教室:
{
courseName: String,
teacher: ObjectId,
students: [{type: ObjectId, ref: 'Student'}]
}
“学生”模式如下所示:
{
personalInfo: PersonalInfo,
proffesionalInfo: {type: ObjectId, ref: 'ProffesionalInfo'}
}
“ProffesionalInfo”架构如下所示:
{
allgrades: [Number],
averageGrade: Number,
...
...
}
我有教室 _id,我只想让学生的平均分低于 90。 我现在的做法是这样的:
Classroom.findOne({ _id })
.populate("teacher", "_id name")
.populate({
path: 'ridesstudents',
select: 'proffesionalInfo',
populate: [
{
path: "proffesionalInfo",
select: "allgrades averageGrade"
}
]
})
.then(classroom => {
classroom.students = classroom.students.filter(student => student.proffesionalInfo.averageGrade < 90);
resolve(user);
})
.catch(err => reject(err));
如您所见,我在带完所有学生后进行过滤。 如果我有 1000 万学生,而只有 2 个学生的成绩低于 90 这是“不好”的方法。
如何过滤查询中的学生,而不是把所有学生都带进来然后过滤??
旁注 - 上面的数据只是一个例子,目标是带来总体思路。不详述。
【问题讨论】:
标签: node.js mongoose mongodb-query mongoose-populate