2012-10-10 36 views
13

Solo una consulta simple, por ejemplo con una doble referencia en el modelo.Múltiples poblados - mongoosejs

esquema/modelo

var OrderSchema = new Schema({ 

    user: { 
     type : Schema.Types.ObjectId, 
     ref  : 'User', 
     required: true 
    }, 

    meal: { 
     type : Schema.Types.ObjectId, 
     ref  : 'Meal', 
     required: true 
    }, 
}); 

var OrderModel = db.model('Order', OrderSchema); 

consulta

OrderModel.find() 
    .populate('user') // works 
    .populate('meal') // dont works 
    .exec(function (err, results) { 
     // callback 
    }); 

ya intentó algo así como

.populate('user meal') 
.populate(['user', 'meal']) 

De hecho, sólo una de las obras puebla.

Entonces, ¿cómo se consiguen dos populates funcionando?

Respuesta

19

Usted ya está usando la sintaxis correcta de:

OrderModel.find() 
    .populate('user') 
    .populate('meal') 
    .exec(function (err, results) { 
     // callback 
    }); 

Quizás el meal OBJECTID de la orden no está en la colección Meals?

+0

gracias, por los demás, van a hacer lo lo mismo: aún así asegúrese de que su identificación esté presente. – mrzmyr

+0

@mrzmyr ¿cuál es el problema aquí? estoy experimentando lo mismo pero no tengo idea de eso. – Pei

15

Si está utilizando Mangosta> = 3.6, se puede pasar de un espacio de cadena delimitada de los nombres de ruta para poblar:

OrderModel.find() 
    .populate('user meal') 
    .exec(function (err, results) { 
     // callback 
    }); 

http://mongoosejs.com/docs/populate.html

+0

de hecho conciso, pero en mi opinión un camino por poblar lo hace más legible. –

+0

esto funciona muy bien para nosotros porque podemos pasar una matriz y hacer arr.join (''); – wayofthefuture

Cuestiones relacionadas