2012-04-18 32 views
7

Tôi đã có sơ đồ sau đây:Mongoose - Lấy đối tượng từ truy vấn ref

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], 
}); 

Những gì tôi đang cố gắng để làm là truy vấn các sự kiện, với một invitation._id, và cuối cùng là lấy lại sử dụng ...

invitees-> eventMember-> user

Cho đến nay tôi đã có:

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

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

wor này ks, và giao diện điều khiển cho thấy đầu ra của myEvent ... (Tôi nhận ra rằng tôi không cần phần cư trú của truy vấn mongoose của tôi ở trên cho điều này ... tôi chỉ đang thử nghiệm)

Tôi đang đấu tranh về cách thức để có được, những gì tôi về cơ bản muốn mô tả như sau: myEvent.invitees.user

EDIT

như một bản cập nhật ... này làm việc - tuy nhiên, nó loại sucks, như bây giờ i' sẽ cần phải thực hiện một hoạt động db khác để có được người dùng (tôi nhận ra ref trong mongoose thực hiện điều này dưới mui xe)

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

trong 3.x thay thế .run() bằng .exec() – chovy

Trả lời

15

Hãy thử

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

Cập nhật:

Đây là một gist làm việc.

Các vấn đề liên quan