Neo4j如何通过多组反向关系查询节点以获取路段内所有线路
Neo4j跨反向关系查询路段关联线路实现方案
默认你的图模型符合常规轨道交通场景设计:Line节点通过HAS_STOP关系关联所属的Trainstop节点,两个Trainstop节点组成一个路段。
- 核心思路:Cypher查询时不指定关系方向即可同时匹配正向、反向关联,不需要单独处理反向关系。如果需要排除重复的站点对,可以通过对比节点内置id实现去重。
- 单对指定站点查询代码示例:
// 替换示例站点id为你要查询的路段两端站点id MATCH (t1:Trainstop {id: "10315"}), (t2:Trainstop {id: "10296"}) MATCH (line:Line)-[:HAS_STOP]-(t1), (line:Line)-[:HAS_STOP]-(t2) RETURN t1.id + ", " + t2.id + ", " + line.id AS result
直接返回你需要的10315, 10296, 1026格式的字符串结果。
- 全量路段线路批量查询代码示例:
MATCH (t1:Trainstop), (t2:Trainstop) MATCH (line:Line)-[:HAS_STOP]-(t1), (line:Line)-[:HAS_STOP]-(t2) // 排除同一站点对的反向重复结果 WHERE id(t1) < id(t2) RETURN t1.id AS Trainstop1, t2.id AS Trainstop2, collect(line.id) AS RelatedLines
如果你模型里的路段是用
[:NEXT_STOP]/[:SEGMENT]这类直接关联两个Trainstop的关系定义的,可以把查询调整为:MATCH (t1:Trainstop)-[:SEGMENT]-(t2:Trainstop) MATCH (line:Line)-[:HAS_STOP]-(t1), (line:Line)-[:HAS_STOP]-(t2) RETURN t1.id + ", " + t2.id + ", " + line.id AS result
内容的提问来源于stack exchange,提问作者guzman
相关产品推荐
相关产品推荐

