Graphql 获取其他相关记录(与查询的id不同)

Graphql 获取其他相关记录(与查询的id不同),graphql,apollo,Graphql,Apollo,作为GraphQL的新手,我希望在以下方面得到一些帮助: 我有一个查询,它检索它的作者和那个作者的书。我希望作者的书是作者的其他书,意思是——除了被询问的那本。它涉及到什么 阿波罗角度查询: const getBookQuery = gql` query($id: ID){ book(id: $id){ id name year author {

作为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
                }
            }
        }
    }
`;

显然,我所寻找的解决方案不应该中断对
书籍的其他查询

您应该能够通过在Author类型def中添加一个参数,然后在书籍的解析器(应该是您的Author类型上的嵌套解析器)中适当地使用该参数来实现排除。将需要为apollo angular修改语法

    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
                }
            }
        }
    }
`;


我不能直接使用你的答案,因为我有一些猫鼬代码而不是真正的typedef,但是你的答案把我推向了正确的方向。基本上需要做的是:(1)在
AuthorType
books
字段上声明
args:{exclude:{type:GraphQLID}}
,(2)在
if
中的解析器中使用它,检查arg是否存在:
Book.find({$and:[{authorId:id},{$ne:exclude}})(3)在客户端查询中,按照建议添加参数:
books(排除:$id)
    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
                }
            }
        }
    }
`;