GraphQL Resolver для интерфейса в той же коллекции Mongoose - PullRequest
0 голосов
/ 13 января 2019

Я создаю сервер GraphQL, который использует Mongoose и GraphQLInterfaceType. У меня есть GraphQLInterfaceType для книг и подтипы SchoolBooksType и ColoringBookType. в моей схеме Mongoose я указал, что и SchoolBook, и 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 Ответ

0 голосов
/ 14 января 2019

Полагаю, вы можете использовать асинхронный преобразователь и объединить оба запроса.

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

  const [sbooks, cbooks] = await Promise.all([schoolBooks, coloringBooks])
  return [...sbooks, ...cbooks]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...