2013-04-08 3 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

правда, он работает удивительно , Я не думал, что это проблема, спасибо много robert – user824624

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