Mongoose populate nested array
Solution 1:
Update: Please see Trinh Hoang Nhu's answer for a more compact version that was added in Mongoose 4. Summarized below:
Car
.find()
.populate({
path: 'partIds',
model: 'Part',
populate: {
path: 'otherIds',
model: 'Other'
}
})
Mongoose 3 and below:
Car
.find()
.populate('partIds')
.exec(function(err, docs) {
if(err) return callback(err);
Car.populate(docs, {
path: 'partIds.otherIds',
model: 'Other'
},
function(err, cars) {
if(err) return callback(err);
console.log(cars); // This object should now be populated accordingly.
});
});
For nested populations like this, you have to tell mongoose the Schema you want to populate from.
Solution 2:
Mongoose 4 support this
Car
.find()
.populate({
path: 'partIds',
model: 'Part',
populate: {
path: 'otherIds',
model: 'Other'
}
})
Solution 3:
Use mongoose deepPopulate plugin
car.find().deepPopulate('partIds.otherIds').exec();