Neo4j cypher查询获取起始节点和结束节点之间的所有节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neo4j cypher查询获取起始节点和结束节点之间的所有节点相关的知识,希望对你有一定的参考价值。

我创建了一个Route / Stops(Rail / Bus)/ Operators模型,并尝试通过指定开始/结束停止来查找路径。当我运行以下查询时,我得到一个额外的停止节点(“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

模型:

结果:

答案

您的查询与示例图中的多个路径匹配。因为您的查询在匹配中允许多种关系类型,所以查询是无向的,并且不指定短路径,它将逐字地找到从模型中的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

导演...

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

以上是关于Neo4j cypher查询获取起始节点和结束节点之间的所有节点的主要内容,如果未能解决你的问题,请参考以下文章

Neo4j Cypher:查找/合并具有至少 2 个公共节点的节点

neo4j cypher 节点可以模糊匹配么

如何优化Neo4J Cypher查询?

Neo4j Cypher 复杂查询优化

Cypher语法

使用 Cypher 在 Neo4j 中通过模式移动与其他节点的关系