Neo4j查询优化:如何为每个目标D节点返回单条A到D路径?
Neo4j查询优化:获取每个A节点到对应D节点的唯一路径
图结构说明
你的图结构如下:
(:A {id:1}) -> (:B {id:1}) -> (:C {id:1}) -> (:D {id:1}) -> (:C {id:2}) (:A {id:2}) -> (:B {id:2}) -> (:C {id:3}) -> (:D {id:2}) -> (:C {id:4}) -> (:C {id:5})
原查询问题
原查询match p=((:A)->(:B)->(:C)->(d:D)) with p, d as target return p, target返回5条路径,是因为每个A节点对应的B节点关联了多个C节点,查询会匹配所有从A出发经B、C到D的路径,但你只需要每个A节点到对应D节点的唯一路径。
修改后的查询方案
方案1:分组提取每个A节点的有效路径
通过COLLECT()按A节点分组,取每组中的第一条路径(每个A仅对应一条有效路径):
MATCH p=(a:A)->(:B)->(:C)->(d:D) WITH a, COLLECT(p)[0] AS path, d RETURN path, d
方案2:先关联A与D的对应关系再匹配路径
根据图中A和对应D节点id一致的特征,先匹配id相等的A、D节点,再查找它们之间的路径,直接过滤无效路径:
MATCH (a:A), (d:D) WHERE a.id = d.id MATCH p=(a)->(:B)->(:C)->(d) RETURN p, d
两种方案都能返回你需要的2条路径:A1到D1、A2到D2。
内容的提问来源于stack exchange,提问作者drdot
相关产品推荐
相关产品推荐

