Skip to content
Developer Edition runs on one host and does not require a product license file. Need multi-host deployment or performance testing at scale? Explore Enterprise Edition

EXISTS predicate

The EXISTS predicate checks if a graph pattern exists or a query returns a non-empty result.

Syntax

exists_predicate
EXISTS { graph_pattern } ( graph_pattern ) { match_statement } { procedure_body }

exists_predicate ::=
    EXISTS ( '{' graph_pattern '}' | '(' graph_pattern ')' | '{' match_statement+ '}' | '{' procedure_body '}' )     

Parameters

graph_pattern

The graph pattern to be checked. For more information, see Patterns.

match_statement

The match statement that specifies the query to be checked. For more information, see MATCH.

procedure_body

The processing logic of the procedure to be checked. It can consist of primitive value variable definitions and statements of the following types:

Examples

The following examples are based on the example dataset.

Check if a node pattern exists

'''
USE movie 
RETURN EXISTS { (v WHERE v.id= 123 ) } AS a
'''

Return:

+------+
| a    |
+------+
| true |
+------+

Check if an edge pattern exists

'''
USE movie
RETURN EXISTS ( ()-[e]->() WHERE e.id= 13423 ) AS b
'''

Return:

Error: [NS230]: property `id` not found in EDGE...

Check if a query returns a non-empty result

'''
USE movie 
RETURN EXISTS { MATCH (a@`User`)-[e:Watch]->(b) WHERE a.id = 123 RETURN e } AS c 
'''

Return:

+------+
| c    |
+------+
| true |
+------+

Check if a procedure returns a non-empty result

'''
USE movie
MATCH (a@Actor) WHERE a.id IN [1, 2, 3, 4, 5]
LET d = EXISTS {
  VALUE born_before_1950::BOOL
  IF a.birthDate < DATE "1950-01-01" THEN 
    {    
      SET born_before_1950 = true
      LOG_INFO(a.name, " was born before 1950: ", born_before_1950)
      FILTER born_before_1950 RETURN born_before_1950
    }
  ELSE 
    { 
      SET born_before_1950 = false
      LOG_INFO(a.name, " was born before 1950: ", born_before_1950)
      FILTER born_before_1950 RETURN born_before_1950
    }
}   
RETURN a.name AS actor_name, d AS born_before_1950
'''

The preceding example checks if each actor with IDs 1 to 5 was born before 1950 and logs the result. The EXISTS predicate returns true if the procedure returns a non-empty result for each actor.

Return:

+---------------+------------------+
| actor_name    | born_before_1950 |
+---------------+------------------+
| Mark Hamill   | false            |
| Carrie Fisher | false            |
| Peter Cushing | true             |
| Harrison Ford | true             |
+---------------+------------------+
Log:
2026-01-20T07:44:00.840764 INFO  - Carrie Fisher was born before 1950: false
2026-01-20T07:44:00.840794 INFO  - Mark Hamill was born before 1950: false
2026-01-20T07:44:00.840804 INFO  - Peter Cushing was born before 1950: true
2026-01-20T07:44:00.841090 INFO  - Harrison Ford was born before 1950: true