作为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
的其他查询。
答案 0 :(得分:0)
您应该能够通过在Author类型def中添加一个参数,然后在用于书籍的解析器中适当使用该参数(应该将解析器嵌套在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
}
}
}
}
`;