跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

EXISTS 谓词

EXISTS谓词检查某个图模式是否存在或某个查询的结果是否非空。

语法

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

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

参数

graph_pattern

待检查的图模式。更多信息,请参见图模式。

match_statement

指定待检查的查询的 MATCH 语句。更多信息,请参见 MATCH。

procedure_body

待检查的过程的处理逻辑,可以由原始值变量定义和以下类型的语句组成:

示例

以下示例基于示例数据集。

检查点模式是否存在

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

返回:

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

检查边模式是否存在

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

返回:

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

检查查询的结果是否非空

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

返回:

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

检查过程的结果是否非空

'''
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
'''

上述实例检查 ID 在 1 到 5 之间的每个演员是否在 1950 年前出生,并记录结果。如果该过程返回非空结果,则EXISTS谓词返回true。

返回:

+---------------+------------------+
| 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