Это моя схема на курсне может заполнить массив с мангуста в 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
правда, он работает удивительно , Я не думал, что это проблема, спасибо много robert – user824624