路径模式表达式
与 EXISTS
子查询类似,路径模式表达式可用于断言图中是否存在至少一条指定的路径。虽然存在性子查询功能更强大,能够实现路径模式表达式所能实现的一切,但路径模式表达式更为简洁。
有关 Cypher® 中图模式匹配的更多信息,请参阅模式。
示例图
以下图用于以下示例
要重新创建该图,请在空的 Neo4j 数据库中运行以下查询
CREATE (alice:Person {name:'Alice', age: 65, role: 'Project manager'}),
(cecil:Person {name: 'Cecil', age: 25, role: 'Software developer'}),
(cecilia:Person {name: 'Cecilia', age: 31, role: 'Software developer'}),
(cecil)-[:WORKS_FOR {since: 2023}]->(alice),
(cecilia)-[:WORKS_FOR {since: 2015}]->(alice)
示例
简单路径模式表达式
MATCH (employee:Person)
WHERE (employee)-[:WORKS_FOR]->(:Person {name: 'Alice'})
RETURN employee.name AS employee
员工 |
---|
|
|
行数: 2 |
包含布尔运算符
NOT
和 AND
的路径模式表达式MATCH (employee:Person)
WHERE NOT employee.name = 'Cecil' AND (employee)-[:WORKS_FOR]->(:Person {name: 'Alice'})
RETURN employee.name AS employee
员工 |
---|
|
行数: 1 |
有关 Cypher 布尔运算符的更多信息,请参阅谓词表达式 → 布尔运算符。
模式可以放在表达式内部。
表达式内部的模式
RETURN NOT (:Person {name: "Alice"})<-[:WORKS_FOR {since: 2023}]-(:Person) AS patternCheck
patternCheck |
---|
|
行数: 1 |
上述示例中需要 NOT 来使查询成为有效的谓词表达式。如果没有它,查询将无效,因为表达式不会返回 BOOLEAN 值。 |
使用
exists()
函数检查模式是否存在RETURN exists((:Person)-[:WORKS_FOR {since: 2023}]->(:Person {name: "Alice"})) AS patternCheck
patternCheck |
---|
|
行数: 1 |