Neo4j 排除具有重复节点的路径
在我的飞行建模中,我想搜索一个站点的路径,这在图中相当于从源到目的地有4跳的关系。使用以下命令搜索路径时:Neo4j 排除具有重复节点的路径,neo4j,cypher,data-modeling,flightpath,Neo4j,Cypher,Data Modeling,Flightpath,在我的飞行建模中,我想搜索一个站点的路径,这在图中相当于从源到目的地有4跳的关系。使用以下命令搜索路径时: match (s:Airport{airportName:'CAN'}), (d:Airport{airportName:'ICN'}) with s,d match p = (s)<-[*4]->(d) return nodes(p), relationships(p) 匹配(s:Airport{airportName
match (s:Airport{airportName:'CAN'}),
(d:Airport{airportName:'ICN'})
with s,d
match p = (s)<-[*4]->(d)
return nodes(p), relationships(p)
匹配(s:Airport{airportName:'CAN'}),
(d:机场{airportName:'ICN'})
与s,d
匹配p=(s)(d)
返回节点(p)、关系(p)
但这也为我提供了两次访问机场节点的路径,如下所示:
所以我的问题是,如何排除包含重复节点的路径?
如何检测路径中是否存在重复节点
谢谢大家! 在一个匹配中,可以多次遍历一个节点,但关系不是这样 因此,对于您的模型,是否可以定义要遍历的关系类型(或列表)以避免出现这种情况 但我认为更好的答案是用更精确的模式重写您的查询:
MATCH p=(s:Airport {airportName:'CAN'})<--(:Flight)-->(stop:Airport)<--(:Flight)-->(d:Airport {airportName:'ICN'})
RETURN nodes(p), relationships(p)
MATCH p=(s:Airport{airportName:'CAN'})(站点:Airport)(d:Airport{airportName:'ICN'})
返回节点(p)、关系(p)
如果您在这个查询中添加方向和关系类型,我想您就不会再有问题了。
如果它持续存在,您可以添加以下where子句:where id(stop)id(d)
但是有一次航班的起点和终点都是一样的,这很奇怪
干杯如果您有权访问,可以尝试使用apoc.algo.allsimplePath()
,它将不包含任何返回到路径中以前访问过的节点的循环
match (s:Airport{airportName:'CAN'}),
(d:Airport{airportName:'ICN'})
call apoc.algo.allSimplePaths(s, d, '', 4) yield path
return nodes(path), relationships(path)
使用更精确的模式重写查询会有帮助。并且您应该将where子句更改为where id(s)id(d),这样您就不会有相同的起点和终点