Build type predicate expressions
This section outlines the process of creating type predicate expressions within your queries using Cypher® Builder.
A type predicate expression serves to validate the type of a variable, literal, property, or another Cypher® expression. It follows the syntax below in Cypher®:
<expr> IS :: <TYPE>
For example:
movie.title IS :: STRING
isType
Type predicate expressions can be constructed using Cypher®.isType (distinct from the .hasType method for relationships).
The isType function takes a Cypher® variable and a type specified in Cypher.TYPE:
Cypher.isType(new Cypher.Variable(), Cypher.TYPE.INTEGER);
var0 IS :: INTEGER
Type predicate expressions can be used in a WHERE statement, for example:
const node = new Cypher.Node();
const matchClause = new Cypher.Match(node).where(Cypher.isType(node.property("title"), Cypher.TYPE.STRING)).return(node);
MATCH (this0)
WHERE this0.title IS :: STRING
RETURN this0
Using Union types
Union types, for example, INTEGER | STRING, can be used by passing an array to .isType:
Cypher.isType(new Cypher.Variable(), [Cypher.TYPE.INTEGER, Cypher.TYPE.STRING]);
var0 IS :: INTEGER | STRING
List Types
List types, for instance, LIST<INTEGER>, can be created using Cypher®.TYPES.list():
Cypher.isType(new Cypher.Variable(), Cypher.TYPE.list(Cypher.TYPE.STRING));
var0 IS :: LIST<STRING>
Union types can also be used within a list:
Cypher.isType(new Cypher.Variable(), Cypher.TYPE.list([Cypher.TYPE.STRING, Cypher.TYPE.INTEGER]));
var0 IS :: LIST<STRING | INTEGER>
Type predicate expressions with NOT
It is also possible to verify that a Cypher® expression is not of a certain type with the function Cypher.isNotType:
Cypher.isNotType(new Cypher.Variable(), Cypher.TYPE.INTEGER);
var0 IS NOT :: INTEGER
Type predicate expressions for non-nullable types
Type predicate expressions evaluate to true in Cypher® for NULL values unless a NOT NULL is appended.
In Cypher® Builder, this can be achieved using the .notNull method:
Cypher.isType(new Cypher.Variable(), Cypher.TYPE.INTEGER).notNull();
var0 IS :: INTEGER NOT NULL
Non-nullable types can also be used within a list type:
Cypher.isType(new Cypher.Variable(), Cypher.TYPE.list(Cypher.TYPE.STRING).notNull());
var0 IS :: LIST<STRING NOT NULL>