Neo4j 排除具有重复节点的路径

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

在我的飞行建模中,我想搜索一个站点的路径,这在图中相当于从源到目的地有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:'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),这样您就不会有相同的起点和终点