0
以下是我的相關模式:過濾單據的條件
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' }],
});
在我的管理制度,我想展現相關的登錄用戶的角色的課程:
- 如果用戶是管理員,顯示所有課程;
- 如果用戶是教師,只顯示他們正在教導的教程;
- 如果用戶是TA,只顯示他們正在教授TA的課程。
在後兩種情況下,用戶被認爲是一個講師/課程的TA,如果他們的用戶ID是在指導員/ TAS的過程的列表,即分別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;
})
});
});
};
我想知道是否有移動過濾進入查詢本身(而不是等待的方式所有的結果,然後過濾)?
謝謝,但我不認爲這會幫助我。我不是試圖包含/排除字段,而是使用一個查詢來包含/排除文檔。 – Mikey
然後做第一個參數,然後 –