是否有可能同时利用GraphQL和Mongoose?
到目前为止,我已经能够集成GraphQL和Mongoose来处理数据库的填充,但我很难理解它如何工作来检索数据,特别是嵌套引用的数据 .
考虑这个架构:
const fooSchema = new Schema({
name: { type: 'String', required: true },
bar: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Bar',
required: false,
}],
});
Bar模式基本相同,只有“name”字段 .
是否可以运行GraphQL查询以使用“bar”中的引用填充数据?
目前,我们使用GraphQL-Tools来创建类似于以下内容的typeDef,Mutations和Queries:
const typeDefs = `
type Foo {
name: String!,
bars:[Bar]
}
type Bar {
_id: ID,
name: String,
}
type Query {
allFoos: [Foo!]!
foo(_id: ID!): Foo
}
type Mutation {
...
}
`;
module.exports = makeExecutableSchema({typeDefs, resolvers});
最后是一个如下所示的查询指令:
const allFoos = async (root, data) => {
return await Foo.find({});
};
我能够更改查询指令以使用.populate()来获取Bar,但实际上并没有最终填充结果,我认为这是因为typeDefs的设置方式 .
那么这两个概念可以一起工作吗?使用它们甚至都有意义吗?
1 回答
正如他们描述GraphQL:
猫鼬的地方
Monogoose使用mongodb验证,而graphql是API的查询语言 .
您可以从here中读取有关使用Node,Express和Mongoose设置简单GraphQL服务器的基本示例 .
这两者完全不同 . 当您在数据库上执行任何操作时,Mongoose工作,而当您调用API时,grapgl会出现在图片中 . Graphql验证您的API输入参数和返回参数 . 如果您在单个应用程序中添加这两个 . 它会运作良好 .
Mongoose将验证您的数据库操作 .
GraphQL将验证您的API输入和输出参数 .