Filter by labels

Most patterns are composed with labels such as (m:Movie) to make simple filtering by labels. Label expressions can also be used to perform complex filtering by labels.

.hasLabel

It is possible to check for label existence in WHERE filters. To do so, the methods .hasLabel and .hasLabels from Node variables can be used in predicates. For example, to match nodes with either the Movie or Film labels:

const movieNode = new Cypher.Node();

const matchQuery = new Cypher.Match(new Cypher.Pattern(movieNode))
    .where(Cypher.or(movieNode.hasLabel("Movie"), movieNode.hasLabel("Film")))
    .return(movieNode);
MATCH (this0)
WHERE (this0:Movie OR this0:Film)
RETURN this0

The method .hasLabels allow to provide multiple labels that the node must have

const movieNode = new Cypher.Node();

const matchQuery = new Cypher.Match(new Cypher.Pattern(movieNode))
    .where(movieNode.hasLabels("Movie", "Film"))
    .return(movieNode);
MATCH (this0)
WHERE this0:Movie:Film
RETURN this0

.hasType

Like labels, relationship types can be filtered in WHERE statements with the method .hasType

const personNode = new Cypher.Node();
const actedIn = new Cypher.Relationship();

const actedInPattern = new Cypher.Pattern({ labels: ["Movie"] })
    .related(actedIn)
    .to(personNode, { labels: ["Person"] });

const matchQuery = new Cypher.Match(actedInPattern)
    .where(Cypher.or(actedIn.hasType("ACTED_IN"), actedIn.hasType("DIRECTED")))
    .return(personNode);
MATCH (:Movie)-[this0]->(this1:Person)
WHERE (this0:ACTED_IN OR this0:DIRECTED)
RETURN this