populate不适用于Mongoose总是返回undefined

时间:2015-10-04 06:19:23

标签: node.js mongodb mongoose

我正在尝试创建一个电子学习应用程序,这是我的架构,但是每当我尝试在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 - 每当我尝试填充用户的课程对象时,它总是返回undefined

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

即使我已经将数据添加到用户的课程字段中,它总是返回未定义。

1 个答案:

答案 0 :(得分: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
      });
    });

它只会返回课程名称。