2012-10-10 11 views
13

Po prostu proste zapytanie, na przykład z podwójnym ref w modelu.Wiele populacji - mongoosejs

Schema/model

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

Zapytanie

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

Próbowałem już coś podobnego

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

W rzeczywistości tylko jeden z zapełnia działa.

W jaki sposób działają dwa populacje?

Odpowiedz

19

Korzystasz już prawidłową składnię:

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

Może meal ObjectId z rzędu nie jest w zbiorach Meals?

+0

dzięki, dla innych, oni wykonać to samo: nadal upewnij się, że Twój identyfikator jest obecny. – mrzmyr

+0

@mrzmyr jaki jest problem? doświadczam tego samego, ale nie mam o tym pojęcia. – Pei

15

Jeśli używasz Mongoose> = 3.6, można przekazać spacjami ciąg nazw ścieżek do wypełnienia:

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

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

+0

jest rzeczywiście zwięzły, ale moim zdaniem jedna ścieżka na populację czyni ją bardziej czytelną. –

+0

działa to doskonale dla nas, ponieważ możemy przekazać tablicę i zrobić arr.join (''); – wayofthefuture

Powiązane problemy