15.1. Predicates

15.1.1. ALL
15.1.2. ANY
15.1.3. NONE
15.1.4. SINGLE

Predicates are boolean functions that return true or false for a given set of input. They are most commonly used to filter out subgraphs in the WHERE part of a query.

See also Section 11.1.2, “Comparison operators”.

Figure 15.1. Graph


15.1.1. ALL

Tests whether a predicate holds for all element of this collection collection.

Syntax: ALL(identifier in collection WHERE predicate)

Arguments:

  • collection: An expression that returns a collection
  • identifier: This is the identifier that can be used from the predicate.
  • predicate: A predicate that is tested against all items in the collection.

Query. 

MATCH p=a-[*1..3]->b
WHERE a.name='Alice' AND b.name='Daniel' AND ALL (x IN nodes(p)
WHERE x.age > 30)
RETURN p

All nodes in the returned paths will have an age property of at least 30.

Result

p
1 row

[Node[3]{age:38,name:"Alice",eyes:"brown"},:RelationshipTypeToken[name:KNOWS, id:0][1] {},Node[5]{age:53,name:"Charlie",eyes:"green"},:RelationshipTypeToken[name:KNOWS, id:0][3] {},Node[1]{age:54,name:"Daniel",eyes:"brown"}]


15.1.2. ANY

Tests whether a predicate holds for at least one element in the collection.

Syntax: ANY(identifier in collection WHERE predicate)

Arguments:

  • collection: An expression that returns a collection
  • identifier: This is the identifier that can be used from the predicate.
  • predicate: A predicate that is tested against all items in the collection.

Query. 

MATCH a
WHERE a.name='Eskil' AND ANY (x IN a.array
WHERE x = 'one')
RETURN a

All nodes in the returned paths has at least one one value set in the array property named array.

Result

a
1 row

Node[2]{age:41,name:"Eskil",array:["one","two","three"],eyes:"blue"}


15.1.3. NONE

Returns true if the predicate holds for no element in the collection.

Syntax: NONE(identifier in collection WHERE predicate)

Arguments:

  • collection: An expression that returns a collection
  • identifier: This is the identifier that can be used from the predicate.
  • predicate: A predicate that is tested against all items in the collection.

Query. 

MATCH p=n-[*1..3]->b
WHERE n.name='Alice' AND NONE (x IN nodes(p)
WHERE x.age = 25)
RETURN p

No nodes in the returned paths has a age property set to 25.

Result

p
2 rows

[Node[3]{age:38,name:"Alice",eyes:"brown"},:RelationshipTypeToken[name:KNOWS, id:0][1] {},Node[5]{age:53,name:"Charlie",eyes:"green"}]

[Node[3]{age:38,name:"Alice",eyes:"brown"},:RelationshipTypeToken[name:KNOWS, id:0][1] {},Node[5]{age:53,name:"Charlie",eyes:"green"},:RelationshipTypeToken[name:KNOWS, id:0][3] {},Node[1]{age:54,name:"Daniel",eyes:"brown"}]


15.1.4. SINGLE

Returns true if the predicate holds for exactly one of the elements in the collection.

Syntax: SINGLE(identifier in collection WHERE predicate)

Arguments:

  • collection: An expression that returns a collection
  • identifier: This is the identifier that can be used from the predicate.
  • predicate: A predicate that is tested against all items in the collection.

Query. 

MATCH p=n-->b
WHERE n.name='Alice' AND SINGLE (var IN nodes(p)
WHERE var.eyes = 'blue')
RETURN p

Exactly one node in every returned path will have the eyes property set to "blue".

Result

p
1 row

[Node[3]{age:38,name:"Alice",eyes:"brown"},:RelationshipTypeToken[name:KNOWS, id:0][0] {},Node[4]{age:25,name:"Bob",eyes:"blue"}]