Neo4j查询优化:如何过滤含X标签节点指向的路径?
问题描述
现有如下图形结构:
[a1:A]->[b1:B]->[c1:C]->[d1:D] [a2:A]->[b2:B]->[c2:C]->[d2:D] ^ | [x1:X]
执行以下查询语句时:
match p=((:A)-[*]->(:D))
会返回上述两条路径,但需要排除第二条路径(该路径中的C节点存在X标签节点的指向关联),求仅返回不包含被X标签节点关联的节点的路径的查询语句。
解决方案
可以使用WHERE NOT EXISTS子句过滤目标路径,具体查询语句如下:
MATCH p=((:A)-[*]->(:D)) WHERE NOT EXISTS { MATCH (x:X)-->(n) WHERE n IN nodes(p) } RETURN p
逻辑说明
- 先通过
MATCH p=((:A)-[*]->(:D))匹配所有从A到D的路径 - 利用
WHERE NOT EXISTS子查询校验:路径中的任意节点是否存在来自X节点的关联 - 仅保留路径内无任何节点被X节点指向的结果,最终只返回第一条符合要求的路径
内容的提问来源于stack exchange,提问作者drdot
相关产品推荐
相关产品推荐

