Neo4j Cypher 显示第一个和最后一个连接的节点

问题描述 投票:0回答:1

我在 Neo4j 中创建了一个图表用于测试目的。图表如下图所示(简化):

我想要的是从伦敦到爱丁堡的路径。为此,我创建了以下 Cypher 查询:

MATCH (start:CITY {Name: "London"})
MATCH (end:CITY {Name: "Edinburgh"})
MATCH path = (start)-[:HAS_STATION]->(:STATION)-[:BOARDS]->(:SECTION)-[:NEXT_SECTION*]->(:SECTION)-[:UNBOARDS]->(:STATION)<-[:HAS_STATION]-(end)
 

此查询为我提供了通过第 1、2 和 3 部分的整个路径。我的结果所需的只是第一部分和最后一部分。如果中间有转运(即格拉斯哥),我还需要转运前的最后一部分和转运后的第一部分。

换句话说:我需要从路径直接连接到车站的每个部分。我尝试了以下扩展:

with nodes(path) as nodes
unwind nodes as node
with node
where ()-[:BOARDS]->(node) or (node)-[:UNBOARDS]->()

但是通过该查询扩展,我最终得到了所有部分,因为它们都可以在特定车站上车或下车(即使该车站不是路径的一部分)。

graph neo4j cypher graph-databases
1个回答
0
投票

要获取路径中的第一个和最后一个 SECTION,请在 NEXT_SECTION 可变长度部分两侧的节点模式中声明一个变量:

MATCH (start:CITY {Name: "London"})
MATCH (end:CITY {Name: "Edinburgh"})
MATCH path = (start)-[:HAS_STATION]->(:STATION)-[:BOARDS]->
             (first:SECTION)-[:NEXT_SECTION*]->(last:SECTION)-[:UNBOARDS]->
             (:STATION)<-[:HAS_STATION]-(end)
RETURN first, last
© www.soinside.com 2019 - 2024. All rights reserved.