2014-11-16 67 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方法採摘。

lodash.pluck(< arrayObj>,<屬性>);

將給出arrayObj中的屬性值列表。

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