Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongoose: deep population (populate a populated field)

I have Category model:

Category:     ...     articles: [{type:ObjectId, ref:'Article'}] 

Article model contains ref to Account model.

Article:     ...     account: {type:ObjectId, ref:'Account'} 

So, with populated articles Category model will be:

{ //category     articles: //this field is populated      [ { account: 52386c14fbb3e9ef28000001, // I want this field to be populated          date: Fri Sep 20 2013 00:00:00 GMT+0400 (MSK),          title: 'Article 1' } ],     title: 'Category 1' } 

The questions is: how to populate subfield (account) of a populated field ([articles])? Here is how I do it now:

globals.models.Category     .find         issue : req.params.id         null         sort:             order: 1     .populate("articles") # this populates only article field, article.account is not populated     .exec (err, categories) ->         console.log categories 

I know it was discussed here: Mongoose: Populate a populated field but no real solution was found

like image 682
f1nn Avatar asked Sep 18 '13 08:09

f1nn


1 Answers

Firstly, update mongoose 3 to 4 & then use the simplest way for deep population in mongoose as below :

Suppose you have Blog schema having userId as ref Id & then in User you have some review as ref Id for schema Review. So Basically, you have three schema : 1. Blog 2. User 3. Review

And, you have to query from blog, which user owns this blog & the user review. So you can query your result as :

BlogModel   .find({})   .populate({     path : 'userId',     populate : {       path : 'reviewId'     }   })   .exec(function (err, res) {    }) 
like image 110
Abhay Avatar answered Sep 22 '22 21:09

Abhay