【问题标题】:GraphQL Resolver for Interface on same Mongoose collection用于同一 Mongoose 集合上的接口的 GraphQL 解析器
【发布时间】:2019-06-07 22:06:08
【问题描述】:

我正在创建一个使用 Mongoose 和 GraphQLInterfaceType 的 GraphQL 服务器。我有书籍的 GraphQLInterfaceType 和 SchoolBooksType 和 ColoringBookType 的子类型。在我的 Mongoose Schema 中,我指定 SchoolBooks 和 ColoringBooks 都将存储在同一个书籍集合中

const coloringSchema = new Schema({
  title: String,//Interface
  pages: String
});

module.exports = mongoose.model("ColoringBook", coloringSchema , "books");

const schoolSchema = new Schema({
  title: String, //Interface
  subject: String
});

module.exports = mongoose.model("SchoolBook", schoolSchema , "books");

这是我的一种类型

const SchoolBookType = new GraphQLObjectType({
  name: "SchoolBook",
  interfaces: [BooksInterface],
  isTypeOf: obj => obj instanceof SchoolBook,
  fields: () => ({
    title: { type: GraphQLString },
    subject: { type: GraphQLString }
  })
});

这是我的查询:但我不知道要返回什么,如果我需要将两个集合合并到同一个数组中?

books: {
      type: new GraphQLList(BooksInterface),
      resolve() {
        return SchoolBook.find({})  //<---- What to return?
      }
    }

这是我的查询:

{
  books{
title
    ... on ColoringBook{
      pages

    }

    ... on SchoolBook{
      subject
    }
  }
}

任何帮助都会很棒,谢谢。

【问题讨论】:

    标签: node.js mongodb express mongoose graphql


    【解决方案1】:

    我猜你可以使用异步解析器,并连接两个查询。

    resolve: async () => {
      const schoolBooks = SchoolBook.find({}).exec()
      const coloringBooks = ColoringBook.find({}).exec()
    
      const [sbooks, cbooks] = await Promise.all([schoolBooks, coloringBooks])
      return [...sbooks, ...cbooks]
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 2016-10-14
      • 2020-05-07
      • 2019-06-12
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2018-11-23
      相关资源
      最近更新 更多