11

次のスキーマがあります。

var userSchema = new Schema({
    firstName: String,
    lastName: String,
    emailAddress: {type: String, set: toLower, index: {unique: true}},
});

var eventMemberSchema = new Schema ({   
    user: { type : Schema.ObjectId, ref : 'User' },
    created: { type: Date, default: Date.now }
});

var eventSchema = new Schema({
    id : String,
    name : String,
    startDate : Date,
    endDate : Date,
    venue : { type : Schema.ObjectId, ref : 'Venue' },

    invitees : [eventMemberSchema],
});

私がやろうとしているのは、invitation._id を使用してイベントをクエリし、最終的にユーザーを取り戻すことです...

招待者 -> イベントメンバー -> ユーザー

これまでのところ、私は持っています:

Event
.find({ "invitees._id": req.query.invitation_id })
.populate('user')
.run(function (err, myEvent) {

  console.log('error: ' + err);
  console.log('event:  '+ myEvent);
})

これは機能し、コンソールには myEvent の出力が表示されます... (これには、上記のマングースクエリの入力部分が必要ないことに気づきました...テストしているだけです)

基本的に次のように説明するものを取得する方法に苦労しています:myEvent.invitees.user

編集

更新として...これは機能します-しかし、ユーザーを取得するために別のdb操作を行う必要があるため、ちょっと面倒です(マングースのrefが内部でこれを行うことを認識しています)

Event
.findOne({ "invitees._id": "4f8eea01e2030fd11700006b"}, ['invitees.user'], function(err, evnt){
    console.log('err:  '+ err);
    console.log('user id:  '+ evnt.invitees[0].user); //this shows the correct user id
});
4

1 に答える 1

19

試す

Event
.find({ "invitees._id": req.query.invitation_id })
.populate('invitees.user')

更新

これが作業の要点です。

于 2012-04-18T17:23:56.793 に答える