2014-11-16 62 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”);