用于同一 Mongoose 集合上的接口的 GraphQL 解析器
Posted
技术标签:
【中文标题】用于同一 Mongoose 集合上的接口的 GraphQL 解析器【英文标题】:GraphQL Resolver for Interface on same Mongoose collection 【发布时间】: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
任何帮助都会很棒,谢谢。
【问题讨论】:
【参考方案1】:我猜你可以使用异步解析器,并连接两个查询。
resolve: async () =>
const schoolBooks = SchoolBook.find().exec()
const coloringBooks = ColoringBook.find().exec()
const [sbooks, cbooks] = await Promise.all([schoolBooks, coloringBooks])
return [...sbooks, ...cbooks]
【讨论】:
以上是关于用于同一 Mongoose 集合上的接口的 GraphQL 解析器的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB/Mongoose:对同一集合中不同类型的文档使用不同的方案