2013-04-08 120 views
0

猫鼬数组这是我在球场上的不能填充在node.js中

var CourseSchema = mongoose.Schema({ 
    students:[{ type: ObjectId, ref: 'User' }] 
}); 
var CourseModel = mongoose.model('Course',CourseSchema); 

var UserSchema = mongoose.Schema({ name:String}) 
var UserModel = mongoose.model('User',UserSchema); 

在MongoDB的架构,我创建了现有的课程和用户,当用户想参与当然,用户参考将被添加到课程模型中的学生数组中。

这里是我尝试对用户引用添加到学生

function joinCourse(cid,uid,callback){ 
    var options = { new: false }; 
    var uid = mongoose.Types.ObjectId(uid); 
    CourseModel.findOneAndUpdate({'_id':cid},{'$addToSet':{'students':uid}},options,function(err,ref){ 
     if(err) { 
      console.log('update joinCourse'.red,err); 
      callback(err, null); 
     }else{ 
      console.log('update joinCourse '.green+ref);     
      callback(null,ref); 
     } 
    }) 

} 

当执行上述功能,学生阵列具有的objectID或用户的参考。但是,当我想从课程模型中填充学生时,它不起作用。

var id = mongoose.Types.ObjectId(id); 
CourseModel.findById(id).populate('students').exec(function(err, users) { 
    if(err){callback(err, null);} 
    else{ 
      //// users.length == undefined 
     console.log("findCourseStudentsById".green,users.length); 
     callback(null, users); 
    }  
}) 

我没有发现填充函数的问题,所以我想知道joinCourse函数有什么问题吗?所以我改变功能为

courseModel.findCourseById(cid,function(err,course){ 
      if(err) next(err);  
     else{ 
      course.students.push({'_id': mongoose.Types.ObjectId(uid)}); 

       course.save(function (err) { 
       if (err) next(err); 

       }); 
      } 
    }) 

但仍填充不起作用。请注意,我用的猫鼬3.6

回答

2

populate填充模型实例,但回调是通过在其上调用填充模型实例,而不是填充的数据本身:

CourseModel.findById(id).populate('students').exec(function(err, course) { 
    if(err){callback(err, null);} 
    else{ 
    console.log("findCourseStudentsById".green, course.students.length); 
    callback(null, course); 
    }  
}); 
+0

真实的,它的工作原理惊人,我没有想到这是问题,多亏罗伯特 – user824624 2013-04-09 02:20:21