如何编写Cypher查询找出不含:X节点类型的A到D路径?
问题说明
我们有如下图结构:
(:A) -> (:B) -> (:C) -> (:D) \ ^ \ | -> (:X) -> (:Y)
从:A到:D存在两条路径:
- 路径1:
(:A) -> (:B) -> (:C) -> (:D) - 路径2:
(:A) -> (:X) -> (:Y) -> (:C) -> (:D)
用下面的Cypher查询会返回这两条路径:
MATCH p1 = ((:A)-[*]-(:D)) RETURN p1
现在需要编写Cypher查询,只返回不包含:X节点类型的路径。
解决方案
可以通过添加WHERE子句过滤路径中的节点,实现需求:
MATCH p1 = (:A)-[*]-(:D) WHERE NOT ANY(n IN nodes(p1) WHERE n:X) RETURN p1
原理说明
nodes(p1)函数会提取路径p1包含的所有节点集合ANY(n IN nodes(p1) WHERE n:X)用于判断路径中是否存在:X类型的节点- 加上
NOT后,查询就只会保留完全不包含:X节点的路径,最终只会返回路径1
内容的提问来源于stack exchange,提问作者drdot
相关产品推荐
相关产品推荐

