2014-11-16 3 views
-1

Моя схема такова, как показано ниже. Учащийся может участвовать в любом нет. событий. Каждое событие может иметь любое количество учеников.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

Пожалуйста, дайте мне знать, как легко это сделать.

Спасибо.

ответ

0

Я использовал способ lodash вырвать.

lodash.pluck (< arrayObj>, < атрибут>);

предоставит список значений атрибутов в arrayObj.

studentList = lodash.pluck (pariticipants, "student"); studentIdList = lodash.pluck (studentList, "_ id");

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