【问题标题】:Leveraging both GraphQL and Mongoose同时利用 GraphQL 和 Mongoose
【发布时间】:2018-03-06 23:18:47
【问题描述】:

是否可以同时利用 GraphQL 和 Mongoose?

到目前为止,我已经能够集成 GraphQL 和 Mongoose 来处理填充数据库,但我很难理解它如何用于检索数据,特别是具有嵌套引用的数据。

考虑这个架构:

const fooSchema = new Schema({
  name: { type: 'String', required: true },
  bar: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Bar',
    required: false,
  }],
});

Bar 架构本质上是相同的,只是“名称”字段。

是否可以运行 GraphQL 查询以使用“bar”中的引用填充数据?

目前,我们正在使用 GraphQL-Tools 创建我们的 typeDefs、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,但这实际上并没有最终填充结果,我认为这是因为 typeDef 的设置方式。

那么有没有可能让这两个概念一起工作呢?同时使用它们是否有意义?

【问题讨论】:

  • 我认为是因为 typeDef 的设置方式,为什么?

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


【解决方案1】:

正如他们描述的 GraphQL:

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

猫鼬在哪里

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

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

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

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

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

【讨论】:

  • 感谢您的回复。我已经看过那个例子,但仍然无法掌握如何调用和填充我的 mongo 引用。
  • 您必须通过解析器调用您的 mongo 参考作为正常调用。
  • GraphQl 与 mongo 调用无关。你只需要用户你的模型实例来执行数据库操作。
  • 谢谢 - 这足以指导我找到我想要的东西。
猜你喜欢
  • 2020-03-05
  • 2018-10-18
  • 2019-06-21
  • 2021-03-31
  • 2021-02-17
  • 1970-01-01
  • 2020-04-16
  • 2019-07-24
  • 2015-01-28
相关资源
最近更新 更多