首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >neo4j中的聚合查询

neo4j中的聚合查询
EN

Stack Overflow用户
提问于 2016-02-17 15:37:58
回答 1查看 41关注 0票数 1

首先,对不起我的英语。我正在neo4j中建模一个铁路的数据库。我想把车站按铁路连接的顺序连接起来,使用车站的表。每一站都有一个“停止序列”,不幸的是它不像1,2,3 (不总是),而只是像1,3,4,6这样的渐进序列。我写了这个查询,对于描述的问题,它并不总是有效的。

代码语言:javascript
复制
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)

要找到正确的“下一步”,我需要一个类似于以下内容的查询:

代码语言:javascript
复制
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”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-18 03:58:57

下面的查询似乎可以执行您想要的操作。它通过stop_sequence命令所有停止,聚合每次行程的所有停止(仍按顺序排列),对每一次行程的所有相邻站配对,UNWIND对这些对进行排序,以便MERGE可以使用配对节点,然后使用MERGE来确保所有节点对之间存在:next关系。

代码语言:javascript
复制
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版本不能正常工作)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35461160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档