我正在使用mongoose连接一个graphQL后端,并且我遇到了嵌套查询的一些mongoose约定的问题。如果我在根查询中有以下字段:
course: {
type: CourseType,
args: { id: { type: new GraphQLNonNull(GraphQLID) } },
resolve(parentValue, { id }) {
return Course.findById(id);
},
},
此课程类型:
const CourseType = new GraphQLObjectType({
name: 'CourseType',
fields: () => ({
id: { type: GraphQLID },
sections: {
type: new GraphQLList(SectionType),
resolve(parentValue) {
return Course.findSections(parentValue._id);
}
}
}),
});
我的模型看起来像这样:
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');
我希望我可以运行这样的查询:
query {
course(id: "4Zpm8zrZYqdbr2i4t") {
id
sections {
id
}
}
}
我应该回顾一下所有部分的特定课程。这些部分以空数组的形式返回,而课程按预期返回。我可以告诉我,如果我在findSections方法中查看它具有正确的id,但populate
似乎没有获取这些部分。
我有一种感觉,我遇到了一些问题,因为mongoose如何使用它的惯例来命名,但我不能为我的生活找出正在发生的事情。这是我的mongoDB的样子:
MongoDB:
Courses: { _id: "4Zpm8zrZYqdbr2i4t" }
Sections: { _id: "00000000000000000", courseId: "4Zpm8zrZYqdbr2i4t" }
答案 0 :(得分:1)
有些事情看起来并不正确。您想要填充路径部分,但字符串是大写字母。请参阅docu。
所以看起来应该是这样的:
CourseSchema.statics.findSections = function(id) {
return this.findById(id)
.populate('sections') // lower case
.then(course => {
return course.sections
});
}