是否可以同时利用GraphQL和Mongoose?
到目前为止,我已经能够集成GraphQL和Mongoose来处理数据库的填充,但我很难理解这是如何工作来检索数据的,特别是具有嵌套引用的数据。
考虑这个架构:
<div class="container-1">
<div class=section-a>
<div id="image">
<image src="images/file-image.png" alt="file image"/>
</div>
<span class="file">File</span>
<span>Add Library</span>
</div>
<div class="section-b">
<span class="left-edge htmlToggle">HTML</span>
<span class="cssToggle">CSS</span>
<span class="jsToggle">JavaScript</span>
<span class="consoleToggle">Console</span>
<span class="right-edge outputToggle">Output</span>
</div>
<div class="section-c">
<span class="highlight">Login or Register</span>
<span>Blog</span>
<span>Help</span>
</div>
</div>
Bar架构基本相同,只有一个字段用于&#34; name&#34;。
是否可以运行GraphQL查询以使用&#39; bar&#39;中的引用填充数据?
目前,我们正在使用GraphQL-Tools创建类似于以下内容的typeDef,Mutations和Queries:
const fooSchema = new Schema({
name: { type: 'String', required: true },
bar: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Bar',
required: false,
}],
});
最后是一个如下所示的查询指令:
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});
我能够更改查询指令以使用.populate()来获取Bar,但实际上并没有最终填充结果,我认为这是因为typeDefs的设置方式。
那么可以将这两个概念结合起来吗?使用它们甚至都有意义吗?
答案 0 :(得分:4)
他们描述了GraphQL:
GraphQL是API的查询语言,也是服务器端运行时的查询语言 通过使用您为数据定义的类型系统来执行查询。 GraphQL并不依赖于任何特定的数据库或存储引擎 而是由现有代码和数据支持。
mongoose在哪里
编写MongoDB验证,转换和业务逻辑样板文件 拖累。这就是我们编写Mongoose的原因
Monogoose使用mongodb验证,而graphql是API的查询语言。
您可以阅读here中有关使用Node,Express和Mongoose设置简单GraphQL服务器的基本示例。
这两者完全不同。当您在数据库上执行任何操作时,Mongoose工作,而当您调用API时,grapgl会出现在图片中。 Graphql验证您的API输入参数和返回参数。如果您在单个应用程序中添加这两个。它会运作良好。