Результат Graphql не заполняет результат в связанном Типе, используя mongoose - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать схемы в Mongoose со ссылкой на ObjectId и могу запрашивать их через GraphQL с помощью Apollo Server

Я определил очень простой объектный идентификатор для Book и Author в mongoose, как это

const { ObjectId } = mongoose.Schema.Types;
const AuthorSchema = new mongoose.Schema({
  name: String
});

const BookSchema = new mongoose.Schema({
  name: String,
  author: [{ type: ObjectId, ref: 'Author' }]
});

И с такой схемой graphql

  type Author {
    id: ID!
    name: String
  }

  type Book {
    id: ID!
    name: String
    author: Author
  }

  type Query {
    authors: [Author]
    author(id: ID!): Author
    books: [Book]
    book(id: ID!): Book
  }

  input AddAuthorInput {
    name: String!
  }

  input AddBookInput {
    name: String!
    author: ID!
  }

  type Mutation {
    addAuthor(input: AddAuthorInput): Author
    addBook(input: AddBookInput): Book
  }

Секция мутаций в resolver для запросов addBook и book выглядит следующим образом

    addBook: async (_, args) => {
      try {
        const {
          input
        } = args;
        return Book.create(input);
      } catch (e) {
        return e.message
      }
    }

      book: async (_, args) => {
        const { id } = args;
        const result = await Book.findById(id).populate('author').exec();

        console.warn('====== Book query result ======');
        console.log(JSON.stringify(result, null, 2));
        console.warn('====== End Book query result ======');

        return result;

Когда я запрашиваю с этим

query book {
  book(id: "xxxxxxx") {
    id
    name
    author {
      name
    }
  }
}

Я получаю нулевое значение в author.name , в то время как из вывода консоли видно, что .populate () смог получить правильный результат из коллекции Authors.

Это репо включает созданный мной пример кода

1 Ответ

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

Ваша схема Мангуста настроена так, чтобы возвращать нескольких авторов на одну книгу:

author: [{ type: ObjectId, ref: 'Author' }]

Если это должен быть только один автор, тогда просто сделайте:

author: { type: ObjectId, ref: 'Author' }

Вы не можете вернуть массив, в котором GraphQL ожидает один объект, и наоборот. Если вы хотите сохранить свою схему Мангуста такой же, вам нужно изменить тип, возвращаемый полем author, на List из Authors:

author: [Author]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...