Deep populate a virtual field

58 views
Skip to first unread message

lordsalisbury1

unread,
Mar 24, 2020, 2:33:46 PM3/24/20
to Mongoose Node.JS ODM

I have a schema structure that is '3 deep' and I find that I can't display information that is at the third level. I'm not sure if it's because this a virtual field, or if I'm doing something wrong.


The collections are programme>project>output. The programme schema looks up the projects like this....

const programmeSchema = new mongoose.Schema({
      name
: {
         type
: String
     
},
      projects
: [{ type: mongoose.Schema.ObjectId, ref: 'Project' }],
     
...
})

Which returns the project. My project schema (middle level) has a virtual field for the outputs collection (third level), like so....

projectSchema.virtual('outputs',
     
{
       
ref: 'Output',
       foreignField
: 'project',
       localField
: '_id'
 
})

Which works fine when I find and display a single project. However, when I try and display the documents from the outputs collection at the programme (top) level, I can't do it. I've tried various different populates, such as.....

await Programme.findOne({ _id: req.params.id }).populate({
      path
: 'projects',
      populate
: {
        path
: 'outputs'
     
}
 
})

but I'm stumped. I've googled around but aside from one article that I struggled to follow, I can't find anything about this (deep populating a virtual field).

Please could someone tell me where I am going wrong?

Reply all
Reply to author
Forward
0 new messages