在List中创建连续元素之间的关系

时间:2017-12-29 11:53:48

标签: list neo4j cypher

我需要能够创建一系列事件,每个事件之间都有一个关系来描述事件的连续性。我知道我可以按时间戳顺序创建一个有序的节点ID列表,即

MATCH (ch:Checkin)
WITH ch
ORDER BY ch.timestamp ASC
WITH collect(id(ch)) AS checkins

我所追求的是使用这个节点id列表在各个节点之间建立关系的最佳方式,即

Checkin_0< -FOLLOWS- Checkin_1< -FOLLOWS- Checkin_2等等

2 个答案:

答案 0 :(得分:2)

您可以使用RANGEUNWIND枚举循环中的签到:

MATCH (ch:Checkin)
WITH ch ORDER BY ch.timestamp ASC
WITH COLLECT(ch) AS checkins
UNWIND RANGE(1, size(checkins)-1) AS i
WITH checkins[i-1] AS prev,
     checkins[i] AS next
MERGE (prev)<-[f:FOLLOWS]-(next)
RETURN prev, f, next

答案 1 :(得分:2)

您还可以查看安装和使用APOC Procedures。有一个名为apoc.nodes.link()的过程,它接受一个集合和一个关系类型字符串,并按顺序在每个节点之间创建这些关系。

MATCH (ch:Checkin)
WITH ch
ORDER BY ch.timestamp DESC
WITH collect(ch) AS checkins
CALL apoc.nodes.link(checkins, 'FOLLOWS')
RETURN checkins