I'm wiring up a graphQL backend with mongoose and I am having trouble with some of the conventions of mongoose for a nested query. If I have the following field in the root query:
course: {
type: CourseType,
args: { id: { type: new GraphQLNonNull(GraphQLID) } },
resolve(parentValue, { id }) {
return Course.findById(id);
},
},
a Course Type of this:
const CourseType = new GraphQLObjectType({
name: 'CourseType',
fields: () => ({
id: { type: GraphQLID },
sections: {
type: new GraphQLList(SectionType),
resolve(parentValue) {
return Course.findSections(parentValue._id);
}
}
}),
});
And my model looks like this:
const CourseSchema = new Schema({
_id: { type: String },
sections: [{
type: Schema.Types.String,
ref: 'Section'
}],
});
CourseSchema.statics.findSections = function(id) {
return this.findById(id)
.populate('Sections')
.then(course => {
return course.sections
});
}
mongoose.model('Course', CourseSchema, 'Courses');
const SectionSchema = new Schema({
_id: { type: String },
course: {
type: Schema.Types.String,
ref: 'Course',
},
});
mongoose.model('Section', SectionSchema, 'Sections');
I would expect that I could run a query like this:
query {
course(id: "4Zpm8zrZYqdbr2i4t") {
id
sections {
id
}
}
}
and I should get back a given course with all of its sections. The sections comes back as an empty array while the course comes back as expected. I can tell that if I look in the findSections method that it has the proper id, but populate
doesn't seem to fetch the sections.
I have a feeling that I am running into some issue with how mongoose uses its conventions for how to name stuff but I can't for the life of me figure out what is going on. Here is what my mongoDB looks like:
MongoDB: Courses: { _id: "4Zpm8zrZYqdbr2i4t" } Sections: { _id: "00000000000000000", courseId: "4Zpm8zrZYqdbr2i4t" }
via Coherent
No comments:
Post a Comment