In this lesson you will learn how the Neo4j GraphQL Library supports GraphQL queries.
Type definitions
Start with using these GraphQL type definitions that define a simple Movie
type with only one property title
. The database contains other data, but for now you will start with this simple type definition.
Replace the contents of the type definition editor with the following snippet:
type Movie @node {
title: String
}
The Generated GraphQL API
The Neo4j GraphQL Library uses the convention of mapping GraphQL types to Neo4j node labels in the property graph model. The single Movie
type defined above maps to a Neo4j property graph model with a single node label Movie
and a single node property title
.
Click on the "Build Schema" button and note that three query field are generated for the Movie
type:
-
Query.movies
- top-level query access -
Query.moviesAggregate
- aggregations -
Query.moviesConnection
- Relay-style connection type
Generated query fields
The GraphQL Library generates the same 3 query fields and mutation operations for each type / node label defined in the type definitions. You will learn about mutations in the next module.
In this lesson you will explore the Query.movies
query field.
Querying the GraphQL API
The Query.movies
query field allow for top-level query access to search for data and begin the data graph traversal from the Movie
type/node label (remember that node labels map to GraphQL types defined in the type definitions when using the Neo4j GraphQL Library).
Run the following query in the Neo4j GraphQL Toolbox to see the results of the generated GraphQL API operations.
query MyQuery {
movies(limit: 10) {
title
}
}
{
"data": {
"movies": [
{ "title": "Toy Story" },
{ "title": "Jumanji" },
{ "title": "Grumpier Old Men" },
{ "title": "Waiting to Exhale" },
{ "title": "Father of the Bride Part II" },
{ "title": "Heat" },
{ "title": "Sabrina" },
{ "title": "Tom and Huck" },
{ "title": "Sudden Death" },
{ "title": "GoldenEye" }
]
}
}
The Query.movies
generated query field takes optional arguments, for example:
-
sort
,offset
,limit
- used to specify sorting, offset, and limit arguments, to enable for example pagination -
where
- use to filter search results by matching predicates for field / node property values
The limit
argument was used in the example query to limit the number of results.
A sort
argument can also be added to change the sort order of the results.
query MyQuery {
movies(limit: 10, sort: { title: ASC }) {
title
}
}
Explore the schema
In addition to editing the GraphQL queries in the Query Editor you can use the Explorer feature integrated into the Neo4j GraphQL Toolbox to interactively explore the schema documentation and toggle fields on and off in the selection set.
Filtering With The where
Argument
Now that you have seen how to use the options
argument, let’s explore the filtering functionality exposed by the where
argument.
If you expand the where
input object in Explorer you can see the various fields available on the input object. These input fields correspond to various string comparison operations with the title
field on the Movie
type.
You can filter for movies titles that contain a certain substring by creating a where
argument against the Movie.title
field.
Run this query which searches for any movies with "Matrix" in the title.
query MyQuery {
movies(where: { title_CONTAINS: "Matrix" }) {
title
}
}
{
"data": {
"movies": [
{ "title": "Matrix Reloaded, The" },
{ "title": "Matrix Revolutions, The" },
{ "title": "Matrix, The" }
]
}
}
Parameters
You can also use GraphQL variables to write queries by passing parameter values in the params.json
panel.
-
Enter the following parameter into
params.json
tab in the Neo4j GraphQL Toolbox.json{ "searchString": "Matrix" }
-
Modify the query to accept and use the
$searchString
parameter.GraphQLquery MyQuery($searchString: String) { movies(where: { title_CONTAINS: $searchString }) { title } }
-
Run the query and see the same results as before.
Check Your Understanding
Query Fields and Types
True or False - When building the GraphQL schema, the Neo4j GraphQL Library by default will create a Query field for each type defined in the GraphQL type definitions.
Choose the correct answer.
-
✓ True
-
❏ False
Hint
Query fields are the entry points for a GraphQL query operation. The Neo4j GraphQL Library maps GraphQL types defined in the GraphQL type definitions to node labels in the Neo4j property graph model.
Solution
The statement is true.
2. Optional Arguments
When using the Neo4j GraphQL Library, the generated query fields accept two optional arguments. What are the names of these arguments?
Select the correct answer.
-
✓
options
andwhere
-
❏
options
andSELECT
-
❏
where
andfilter
-
❏
MATCH
andMERGE
Hint
One of these arguments is used to specify sorting, offset, and limit options. The other is used to filter search results by matching predicates.
Solution
The answer is options
and where
.
Filtering
True or False - The fields of the where
input object used for filtering will vary depending on the declared types.
-
✓ True
-
❏ False
Hint
Would the filtering functionality exposed be different for strings vs integers?
Solution
The statement is true.
Summary
In this lesson, you explored the Query API of the Neo4j GraphQL Library and the Neo4j GraphQL Toolbox.
In the next lesson, you will see how to build a more complex data graph using the GraphQL schema type definitions and the Neo4j GraphQL Toolbox.