2012-04-18 21 views
7

Tengo los siguientes esquemas:Mangosta - Recuperando objeto de consulta 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], 
}); 

Lo que estoy tratando de hacer, es consultar los eventos, con una invitation._id, y, finalmente, volver al usuario ...

invitees-> eventMember-> usuario

Hasta ahora tengo:

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

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

Este WOR ks, y la consola muestra la salida de myEvent ... (me doy cuenta de que no necesito rellenar la parte de mi consulta de mangosta anterior para esto ... solo estoy probando)

Estoy luchando sobre cómo de conseguir, lo que básicamente describiría como: myEvent.invitees.user

EDITAR

como una actualización ... Esto funciona - sin embargo, que tipo de mierda, como ahora i' ll necesita hacer otra operación de DB para obtener el usuario (me doy cuenta de que la referencia en la mangosta hace esto bajo el capó)

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

en 3.x reemplaza .run() con .exec() – chovy

Respuesta

15

Trate

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

actualización:

Aquí es una gist de trabajo.