-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();
    });

}

このコードは機能しています。したがって、この方法では、最初の 2 つの参加者のみが更新され、次に eventobj に追加されます。しかし、検索クエリですべてのparticipants.student._idを選択したい

簡単にできる方法を教えてください。

ありがとう。

4

1 に答える 1

0

私はlodashメソッドの摘み取りを使用しました。

lodash.pluck(<配列オブジェクト>,<属性>);

arrayObj 内の属性値のリストを提供します。

studentList = lodash.pluck(参加者,"学生"); studentIdList = lodash.pluck(studentList,"_id");

于 2014-11-19T06:21:55.857 に答える