繁体   English   中英

同一Mongoose集合上用于接口的GraphQL解析器

[英]GraphQL Resolver for Interface on same Mongoose collection

我正在创建一个使用Mongoose和GraphQLInterfaceType的GraphQL服务器。 我有书籍的GraphQLInterfaceType以及SchoolBooksType和ColoringBookType的子类型。 在我的猫鼬模式中,我指定了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
    }
  }
}

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

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

resolve: async () => {
  const schoolBooks = SchoolBook.find({}).exec()
  const coloringBooks = ColoringBook.find({}).exec()

  const [sbooks, cbooks] = await Promise.all([schoolBooks, coloringBooks])
  return [...sbooks, ...cbooks]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM