2012-04-18 11 views
7

をオブジェクトの取得:マングース - 私は、次のスキーマを持っている参照クエリから

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で、イベントを照会し、最終的にユーザーを取り戻します...

invitees-> eventMember->ユーザー

これまでのところ私が持っている:

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

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

このWOR ks、コンソールにはmyEventの出力が表示されます... (これについて私のmongooseクエリの人口部分は必要ありません...私はちょうどテストしています)

私はどのように苦労しています私は基本的に説明したいものを、取得する:myEvent.invitees.userアップデートとして

EDIT

を...この作品 - しかし、それは一種の吸う、今私は」として私はユーザーを取得するために別のDB操作を行う必要があります(私は、フードの下でこれを行うmongooseで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 
}); 
+2

(3.x)は.run()を.exec()に置き換えます。 – chovy

答えて

15

更新

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

を試してみてください:ここで

は作業gistです。

関連する問題