首先,对不起我的英语。我正在neo4j中建模一个铁路的数据库。我想把车站按铁路连接的顺序连接起来,使用车站的表。每一站都有一个“停止序列”,不幸的是它不像1,2,3 (不总是),而只是像1,3,4,6这样的渐进序列。我写了这个查询,对于描述的问题,它并不总是有效的。
MATCH (a:Station)-[:stop]->(c:Stops_times)-[:trip]->(z:Trips)<-[:trip]-(d:Stops_times)<-[:stop]-(b:Station) WHERE toint(c.stop_sequence)=toint(d.stop_sequence)+1 CREATE (a)-[s:next]->(b)要找到正确的“下一步”,我需要一个类似于以下内容的查询:
MATCH (a:Station)-[:stop]->(c:Stops_times)-[:trip]->(z:Trips)<-[:trip]-(d:Stops_times)<-[:stop]-(b:Station) WITH c as c, d as d, MIN(d.stop_sequence) as min_ WHERE min_>c.stop_sequence CREATE UNIQUE (a)-[s:next]->(b)因此,对于每一站,我必须在较高的站之间找到最小的"stop_sequence“,而不是我想要找到的下一站的"stop_sequence”。
发布于 2016-02-18 03:58:57
下面的查询似乎可以执行您想要的操作。它通过stop_sequence命令所有停止,聚合每次行程的所有停止(仍按顺序排列),对每一次行程的所有相邻站配对,UNWIND对这些对进行排序,以便MERGE可以使用配对节点,然后使用MERGE来确保所有节点对之间存在:next关系。
MATCH (a:Station)-[:stop]->(c:Stops_times)-[:trip]->(t:Trips)
WITH a, c, t
ORDER BY c.stop_sequence
WITH t, COLLECT(a) AS s
WITH REDUCE(x =[], i IN RANGE(1, SIZE(s)-1)| x + {a: s[i-1], b: s[i]}) AS pairs
UNWIND pairs AS p
WITH p.a AS a, p.b AS b
MERGE (a)-[n:next]->(b);在我的Mac上,它在2.3.2中正常工作(但是当查询到达neo4j时,http://console.neo4j.org/上可用的MERGE版本不能正常工作)。
https://stackoverflow.com/questions/35461160
复制相似问题