2015-10-04 2 views
1

Я пытаюсь создать приложение для электронного обучения, и это мои схемы, но проблема прямо сейчас, когда я пытаюсь отображать пользовательские курсы в mongodb, и он показывает курсы, которые конкретный пользователь имеет.populate не работает для Mongoose всегда возвращает undefined

Данные в массиве

"courses" : [ "Learn how to be awesome", "Learn how to be a chef" ] 

Два SCHEMAS

var UserSchema = Schema({ 
    email: String, 
    password: String, 
    courses: [{ type: Schema.Types.String, ref: 'Course'}], 
}); 

var CourseSchema = Schema({ 
    title: String, 
    owners: [{ type: Schema.Types.ObjectId, ref: 'User'}], 
    body: String, 
    teacher: { type: Schema.Types.String, ref: 'User'}, 

}); 

routes.js - всякий раз, когда я пытаюсь заполнить объект обучения пользователя, он всегда возвращает неопределенное

router.get('/my-courses', isLoggedIn, function(req, res) { 

    User 
    .findById(req.user.id) 
    .populate('courses') 
    .exec(function(err, courses) { 
     console.log(courses); // always return undefined 
     res.render('course/student-courses', { 
     userCourses: courses 
     }); 
    }); 
}); 

Он всегда возвращает undefined, хотя я уже добавил данные в поле курсов пользователя.

+0

Populate работает только со значением '_id 'указанной модели, но похоже, что вы используете значение' title'. –

ответ

2

Во-первых, вы должны изменить свой UserSchema:

var UserSchema = Schema({ 
    email: String, 
    password: String, 
    courses: [{ type: Schema.Types.ObjectId, ref: 'Course'}], 
}); 

Вы можете ссылаться на другую схему только _id. Также сделайте это изменение для учителя внутри CourseSchema.

Затем с помощью заполнения с выбором поля:

User 
    .findById(req.user.id) 
    .populate('courses', 'title') 
    .exec(function(err, courses) { 
     console.log(courses); // always return undefined 
     res.render('course/student-courses', { 
     userCourses: courses 
     }); 
    }); 

Он будет возвращать только название курсов.

Смежные вопросы