填充不工作对于Mongoose总是返回undefined

我试图创build一个电子学习应用程序,这是我的模式,但现在的问题,现在每当我尝试在MongoDB呈现用户的课程,它显示特定用户正在具有的课程。

数据在数组中

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

两个模式

 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 }); }); }); 

即使我已经将数据添加到用户的课程领域,它总是返回一个未定义的。

首先你应该改变你的UserSchema:

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

您只能通过_id引用另一个模式。 对CourseSchema内部的老师也做这个改变。

然后使用填充字段select:

  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 }); }); 

它将只返回课程的标题。