Node Populate Array with object reference

Viewed 16

I need to Populate courses of StudentSchema with the courses (Object_id) from CoursesSchema that belong to the major same as students major

let StudentSchema = new Schema({
    _id: new Schema.Types.ObjectId,
    emplId: {
        type: Number,
        required: true
    },
    major:{
        type: String,
        required: true
    },
    courses:[{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'courses',
        grade:{
            type: String,
            required: false,
        }
    }],

});
const courseSchema = new mongoose.Schema({
    code: {
        type: String,
        required: true
    }, 
    title: {
        type: String,
        required: true
    },

//array of majors that a courses is required for e.g: ['CS', 'CIS']
    major: {
        type: Array,
        required: false,


    },
//
    CIS:{
        type: Boolean,
        required: false,
    },
    CNT:{
        type: Boolean,
        required: false,
    },
    CS:{
        type: Boolean,
        required: false,
    },
    GIS:{
        type: Boolean,
        required: false,
    },
})

What do I do?

StudentCoursesRouter.get('/studentcourses', (req, res) => {
    
    Courses.find({CS: true}, (err, courses) => {

        if ( err ) {
            console.log('Error occured while getting records');
            res.json(err);
        } else {
            courseMap = {}

            courses.forEach(function(course) {
            courseMap[course._id] = course._id;
          });
          
        //res.send(courses);

          Students.find({empleId: 12345678}).courses.push(courses);
        }

res.json(Students);
    })

This is what i am doing but it is not populating courses of student and gives an empty array for courses.

API Request Response Screenshot

1 Answers

You mention populate but you are not using populate?

e.g. Students.find({empleId: 12345678}).populate('course')

If you want it lean u also need to install mongoose-lean-virtuals

e.g. Students.find({empleId: 12345678}).populate('course').lean({ virtuals: true })
Related