首页 文章

利用GraphQL和Mongoose

提问于
浏览
0

是否有可能同时利用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 回答

  • 3

    正如他们描述GraphQL:

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

    猫鼬的地方

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

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

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

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

    • Mongoose将验证您的数据库操作 .

    • GraphQL将验证您的API输入和输出参数 .

相关问题