以下是我的相关模式:
const UserSchema = new mongoose.Schema({
name: {
first: String,
last: String
},
// Each user can have multiple roles
roles: [{
type: String,
enum: ['admin', 'instructor', 'teachingAssistant', 'student']
}]
});
UserSchema.methods.hasRole = function (role) {
return this.roles.indexOf(role) > -1;
};
const CourseSchema = new mongoose.Schema({
name: { type: String, required: true },
code: { type: String, required: true, unique: 1, uppercase: 1 },
// Instructors teaching this course
instructors: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
// TAs teaching this course
teachingAssistants: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
// Students enrolled in the course
students: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
}); 在我的管理系统中,我想展示与登录用户角色相关的课程:
在最后两种情况下,如果用户ID在课程的讲师/助教列表中,即course.instructors.indexOf(user._id) > -1或course.teachingAssistants.indexOf(user._id) > -1,则用户被视为课程的指导员/助教。
目前,我是如何为登录用户(即req.user )筛选课程的。
exports.getCourses = (req, res) => {
models.Course.find().sort('code').lean().exec((err, courses) => {
res.render('admin/pages/courses', {
bodyClass: 'courses',
title: 'Courses',
courses: _.filter(courses, course => {
return req.user.hasRole('admin') ||
course.instructors.indexOf(req.user.id) !== -1 ||
course.teachingAssistants.indexOf(req.user.id) !== -1;
})
});
});
};我想知道是否有一种方法可以将过滤移到查询本身(而不是等待所有结果,然后进行筛选)?
发布于 2017-07-24 15:52:11
可以,让我们关注这一节。
models.Course.find().在.find()的第二个参数中,可以指定只想获取哪些字段。
场景1:用户角色=管理
var options = {};
models.Course.find({}, options)
...https://stackoverflow.com/questions/45283405
复制相似问题