Моя схема такова, как показано ниже. Учащийся может участвовать в любом нет. событий. Каждое событие может иметь любое количество учеников.Batch Обновление массива в объекте mongoose
Student{
name:String,
age:Number,
.
.
.,
events:{
type:
[
{type:Schema.ObjectId,
ref:'Event'}
]
}
}
Event{
title:String,
desc:String,
eventDate:Date,
participants:{
type:
[{
student: {type:Schema.ObjectId,
ref:'Student'},
status : String
}]
}
}
Мое требование: Каждый раз, когда я создаю событие, мне нужно, чтобы подтолкнуть всех участников этого события внутри объекта события. и, в свою очередь, пометьте ссылку события внутри всех участников.
Мой код
function handleTeamParticipants(eventObj, participants) {
Student
.find({
$or: [{
_id: participants[0].student._id
}, {
_id: participants[1].student._id
}]
})
.populate('events events.participants events.participants.student')
.exec(function(err, students) {
var studentLength = students.length,
result = [];
var saveAll = function() {
var doc = students.pop();
Student.populate(doc, {
path: 'events.participants.student',
model: 'Student'
}, function(err, student) {
student.events.push(eventObj);
student.save(function(err, saved) {
if (err) next(err); //handle error
result.push(saved);
if (--studentLength) saveAll();
else // all saved here
{
return res.status(200).send(eventObj);
}
});
});
};
saveAll();
});
}
Этот код работает. Итак, таким образом, я обновляю только первых двух участников и, в свою очередь, добавляю к eventobj. Но я хочу, чтобы запрос на поиск выберет всех участников .student._id
Пожалуйста, дайте мне знать, как легко это сделать.
Спасибо.