GraphQL nested filter

For example I have a schema:

type Author {
    name: String
    books: [Book] @hasInverse(field: author) 
}
type Book {
    author: Author @hasInverse(field: books) 
    genre: String @search(by: [hash])
}

Is it possible to make nested filter? Something like that:

{
    queryAuthor(filter: { books: { genre: { eq: "detective" }}}) {
        name
        books {
            name
            genre
        }
    }
}

Here I want to get all the authors who wrote books in the genre of detective (and their books)

2 Likes

Hi, thanks for looking at our GraphQL features.

Filtering a result based on some deeper feature in the graph is a really powerful thing. Problem is the level of nesting needed is unbounded, so that ends up making a really big schema and really deep queries.

In our extended GraphQL± query language, you can do queries like this with query variables (https://docs.dgraph.io/query-language/#query-variables) or the handy uid_in function (https://docs.dgraph.io/query-language/#uid-in). We are planing on adding those sorts of feature in a GraphQL compliant way.

In the current GraphQL implementation, you’ll need to issue multiple queries where you restrict by ids to create the same effect.

Hey @poketulhu,

Adding onto what @michaelcomptonsaid, you can also check out the section on cascade in this blog https://blog.dgraph.io/post/tutorial-8-getting-started/ .
Cascade in Dgraph’s GraphQL± query language helps you filter the top layer results based on the filter in the deeper parts of the query.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.