Populate multiple fields using lookup in mongodb

I am new to mongodb and wanted to populate two ids using lookup

Eg:

{
      "sampleId1": "5kjksds8nkjfhsjfi8kl",
      "sampleId2": "7jhjshfi9jsfkjsdfkkk"
    }

I am using aggregate framework to query the data and wanted to popualte both ids.

I want $loopup to populate both ids which is similar to

Model.find().populate('sampleId1').populate('sampleId2')

Upvotes: 2

Views: 467

Answers (1)

Manjeet Singh
Manjeet Singh

Reputation: 2398

For your case, I want to suggest you mongoose-autopopulate like this

    const autopopulate = require('mongoose-autopopulate')'

    const sampleSchema = new Schema({
      sampleId1: {type: Schema.ObjectId, ref: 'ColleactionName', autopopulate: {select: 'firstName, lastName'}},
    sampleId2: {type: Schema.ObjectId, ref: 'ColleactionName', autopopulate: {select: 'firstName, lastName'}}
    })


    sampleSchema.plugin(autopopulate)

module.exports = mongoose.model('sampleSchema', sampleSchema)

now whenever you request for find it automatically populates all field who have Schema.ObjectId

let criteria = {},
projection = {},
options = {lean: true}


Model.find(criteria, projection, options, (err, result) => {
 console.log(result); // See out-put 
})

The second thing you need to check in your schema that sampleId1 and sampleId2 both have type type: Schema.ObjectId with reference of collection name ref: 'ColleactionName'

the second way to this thing which you already have done you question

sampleSchema.
  find(...).
  populate('sampleId1').
  populate('sampleId2').
  exec();

Upvotes: 2

Related Questions