Получить другие связанные записи (с идентификатором, отличным от запрашиваемого) - PullRequest
0 голосов
/ 31 октября 2019

Как новичок в GraphQL, я был бы признателен за помощь в следующем:

У меня есть запрос, который находит его автора и книги этого автора. Я хотел бы, чтобы книги автора были авторскими другими книгами, то есть, за исключением того, что запрашивается. Что это включает в себя?

аполло-угловой запрос:

const getBookQuery = gql`
    query($id: ID){
        book(id: $id){
            id
            name
            year
            author {
                id
                firstName
                lastName
                books {        # <-- give me all _except_ the one with $id
                    name
                    year
                    id
                }
            }
        }
    }
`;

и в schema.js (сервер node.js) у меня есть что-то вроде:

const RootQuery = new GraphQLObjectType({
    name: 'RootQueryType',
    fields: {
        book: {
            type: BookType,
            args: { id: { type: GraphQLID } },
            resolve(parent, args) {
                const { id } = args;
                return Book.findById(id);
            },
        },
        books: {
            type: GraphQLList(BookType),
            resolve() {
                return Book.find({});
            },
        },
        // ... other queries ...
     }
})

Решение, которое я ищу, не должно нарушать другие запросы для books.

1 Ответ

0 голосов
/ 31 октября 2019

Вы должны быть в состоянии добиться исключения, добавив аргумент к типу Author с определением и затем соответствующим образом используя этот аргумент в преобразователе для книг (который должен быть вложенным преобразователем для вашего типа Author). Нужно будет адаптировать синтаксис для аполло-угловых.

    type Author {
       id: 
       firstName: String
       lastName: String 
       books(exclude: ID): [Book]
     }

    const resolverMap = {
      Query: {
        book(arent, args, ctx, info) {
          ...
        }
     },
     Author: {
        books(obj, args, ctx, info) {
          // Use args.exclude passed to filter results
        },
      },
    };

   const getBookQuery = gql`
    query($id: ID){
        book(id: $id){
            id
            name
            year
            author {
                id
                firstName
                lastName
                books(exclude: $id) {        
                    name
                    year
                    id
                }
            }
        }
    }
`;

...