我已经设置了一个Neo4j Graph DB。
我有以下节点和关系类型:
我的问题是如何通过关系类型“BUS”获取Station中两个节点之间的路径?
Station(1)->BUS->Station(31)
谢谢。
答案 0 :(得分:1)
您可以使用这样的简单Cypher查询:
MATCH p = (:Station {id:1})-[:BUS*]->(:Station {id:31})
RETURN p
此查询将MATCH
p
和(:Station{id:1})
之间的路径((:Station {id:31})
)仅跟随:BUS
类型的任意长度的关系(由{表示)在关系类型之后{1}}。
您还可以指定查询将遵循的跃点数,将其放在*
之后(例如:[:BUS * 1..3]将至少跟随1和最多3个跃点)。请查看MATCH clause docs。
修改强>
来自汉斯评论:
我对最短的路径感兴趣
您可以使用shortestPath()功能。这样:
*
来自文档:
适用于最短路径的 WHERE 子句中使用的谓词 在确定最短匹配路径之前评估模式 是
上述查询将返回MATCH (a:Station {id:1}), (b:Station {id:31}), p = shortestPath((a)-[*]-(b))
WHERE ALL (r IN relationships(p) WHERE type(r) = 'BUS')
RETURN p
和a
仅评估b
关系的最短路径。