2012-10-10 15 views
13

Solo una semplice query, ad esempio con un doppio riferimento nel modello.Popolazioni multiple - mongoosejs

Schema/Modello

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); 

Query

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

ho già provato qualcosa di simile

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

In realtà solo una delle popola funziona.

Quindi, come si fa a far funzionare due popolamenti?

risposta

19

Si sta già utilizzando la sintassi corretta:

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

Forse il meal ObjectId dall'ordine non è nella collezione Meals?

+0

grazie, per gli altri, faranno il lo stesso: assicurati che il tuo ID sia presente. – mrzmyr

+0

@mrzmyr qual è il problema qui? sto vivendo lo stesso, ma non ne ho idea. – Pei

15

Se stai usando Mongoose> = 3.6, è possibile passare uno spazio stringa delimitata dei nomi di percorso per popolare:

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

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

+0

effettivamente conciso ma secondo me un percorso per popolare lo rende più leggibile. –

+0

funziona molto bene per noi perché possiamo passare un array e fare arr.join (''); – wayofthefuture