2012-04-18 125 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); 
}) 

這窩ks和控制檯顯示myEvent的輸出... (我意識到我不需要我的貓鼬查詢的填充部分爲此...我只是測試)

我在努力如何得,我想基本上描述爲:myEvent.invitees.user

編輯

作爲更新... 這工作 - 但是,它那種很爛,因爲現在我我需要做另一個數據庫操作來獲取用戶(我意識到引用貓鼬這樣做在引擎蓋下)

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用.exec()替換.run() – chovy 2012-10-01 06:11:42

回答

15

嘗試

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

更新

這裏是一個工作gist