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 two query field are generated for the Movie type:
- 
Query.movies- top-level query access
- 
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, for example to enable pagination
- 
where- used 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
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.jsontab in the Neo4j GraphQL Toolbox.json{ "searchString": "Matrix" }
- 
Modify the query to accept and use the $searchStringparameter.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. 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.