Neo4j Cypher查询:获取起始节点和结束节点之间的所有节点,包括它们。

3

我创建了一个路线/站点(铁路/公交车)/运营商模型,试图通过指定起始/终止站点来查找路线。当我运行下面的查询时,我发现会得到一个多余的停靠节点(“PUD”),我认为它不应该包含在结果中!请告诉我为什么会包括“PUD”,以及这是正确的方法吗?

MATCH p = (a:Station)-[r:Goto|Operates|HasStop|Changeto*0..]-(c:Station) 
WHERE (a.name='LDS' AND 234 IN a.time) 
AND c.name='MVC' 
RETURN p

模型:模型

结果:结果


Cypher将在您的图片中找到从ac的所有路径。 - Dave Bennett
1个回答

3
你的查询在示例图中匹配了多条路径。由于查询中允许多种关系类型的匹配,且查询是无向的且没有指定最短路径,因此它会找到从 ac 的所有关系组合。
如果你将查询更改为仅匹配 GotoChangeto 关系类型,则可以得到你要寻找的结果。
或者,如果你使查询变为有向的或使用 shortestPath,也可以得到所需结果。
MATCH p =(a:Station)-[r:Goto|Changeto*0..]-(c:Station)
WHERE (a.name='LDS' AND 234 IN a.time) 
AND c.name='MVC' 
RETURN p

Directed...

MATCH p = (a:Station)-[r:Goto|Operates|HasStop|Changeto*0..]->(c:Station) 
WHERE (a.name='LDS' AND 234 IN a.time) 
AND c.name='MVC' 
RETURN p

最短路径...

MATCH p = shortestPath((a:Station)-[r:Goto|Operates|HasStop|Changeto*0..]-(c:Station))
WHERE (a.name='LDS' AND 234 IN a.time) 
AND c.name='MVC' 
RETURN p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接