在列表中的连续元素之间建立关系



我需要能够创建与每个事件之间的一系列事件,以描述事件的继承。我知道我可以按时间戳顺序创建其节点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等

您可以使用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

您还可以查看安装和使用APOC过程。有一个称为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

最新更新