利用GraphQL和Mongoose

时间:2017-09-25 21:32:23

标签: node.js mongodb mongoose graphql graphql-js

是否可以同时利用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的设置方式。

那么可以将这两个概念结合起来吗?使用它们甚至都有意义吗?

1 个答案:

答案 0 :(得分:4)

他们描述了GraphQL:

  

GraphQL是API的查询语言,也是服务器端运行时的查询语言   通过使用您为数据定义的类型系统来执行查询。   GraphQL并不依赖于任何特定的数据库或存储引擎   而是由现有代码和数据支持。

mongoose在哪里

  

编写MongoDB验证,转换和业务逻辑样板文件   拖累。这就是我们编写Mongoose的原因

Monogoose使用mongodb验证,而graphql是API的查询语言。

您可以阅读here中有关使用Node,Express和Mongoose设置简单GraphQL服务器的基本示例。

这两者完全不同。当您在数据库上执行任何操作时,Mongoose工作,而当您调用API时,grapgl会出现在图片中。 Graphql验证您的API输入参数和返回参数。如果您在单个应用程序中添加这两个。它会运作良好。

  1. Mongoose将验证您的数据库操作。
  2. GraphQL将验证您的API输入和输出参数。