AG_HIHI
AG_HIHI

Reputation: 1995

Having to query a model before populating it otherwise it throws this error: MissingSchemaError: Schema hasn't been registered for model "Grade"

I am trying to fetch tutors:

await mongoose.connect(MONGODB_URI);

const subjects = await Subject.find();

const grades = await Grade.find();

const tutors = await Tutor.find()
    .populate('gradeSubjects.grade')
    .populate('gradeSubjects.subject')

If I don't add the lines that fetch subjects and grades I get this error:

MissingSchemaError: Schema hasn't been registered for model "Grade".
MissingSchemaError: Schema hasn't been registered for model "Subject".

I don't understand why this happens.
Here are the definitions of the models:

Tutor

import mongoose, { Schema, model, models } from 'mongoose';

const tutorSchema = new Schema({
    name: { type: String, required: true },
    gradeSubjects: [
        {
            grade: { type: mongoose.Schema.Types.ObjectId, ref: 'Grade', required: true },
            subject: { type: mongoose.Schema.Types.ObjectId, ref: 'Subject', required: true }
        }
    ]
});

const Tutor = models.Tutor || model('Tutor', tutorSchema);

export default Tutor;

Grade

import mongoose, { Schema, model, models } from 'mongoose';

const gradeSchema = new Schema({
    name: { type: String, required: true },
    subjects: [{ type: Schema.Types.ObjectId, ref: 'Subject' }],  // Reference to subjects
});

const Grade = models.Grade || model('Grade', gradeSchema);

export default Grade;

Subject

import mongoose, { Schema, model, models } from 'mongoose';

const subjectSchema = new Schema({
    name: { type: String, required: true },
});

const Subject = models.Subject || model('Subject', subjectSchema);

export default Subject;

Any idea what's going on?

Upvotes: 0

Views: 45

Answers (0)

Related Questions