EXISTS 谓词¶
EXISTS谓词检查某个图模式是否存在或某个查询的结果是否非空。
语法¶
- exists_predicate
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