2014-11-16 5 views
-1

내 스키마는 다음과 같습니다. 학생은 모든 아니오에 참여할 수 있습니다. 각 이벤트에는 여러 명의 학생이 참여할 수 있습니다.몽구스 개체 배열을 일괄 업데이트

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.pluck (< arrayObj>, < 속성>);

은 arrayObj의 속성 값 목록을 제공합니다.

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