Search code examples
node.jsmongodbmongoosemongoose-populate

How to populate sub document of another model in mongoose?


I have two mongodb model as following.

const CompanySchema = new Schema(
  {   
    sections: [{
      name: { type: String },
      budgets: [{ // indicates from CalcSchema
        index: { type: Number },
        title: { type: String },
        values: [Number],
        sum: { type: Number, default: 0 },
      }],
    }]
  },
  { timestamps: true }
);

const CalcSchema = new Schema({
    budget: {
        type: Schema.Types.ObjectId, // I want to populate this field. this indicates budget document in Company model
        ref: "Company.sections.budgets" //it's possible in mongoose?
    },
    expense: {
        type: Number,
        default: 0
    }
});

budget field indicate one of budgets field in CompanySchema. So I want to populate when get Calc data. But I don't how to populate embedded document.

I tried set ref value to ref: "Company.sections.budgets". but it's not working.

Please anyone help.


Solution

  • Finally, I found answer myself.

    There is useful plugin for it.

    https://github.com/QuantumGlitch/mongoose-sub-references-populate#readme

    And I learned that my schema structure was wrong. It's anti-pattern in mongodb.