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

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

我需要能够创建一系列事件,每个事件之间都有一个关系来描述事件的连续性。我知道我可以按时间戳顺序创建节点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等等

list neo4j cypher
2个回答
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

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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.