如何使用Cypher从Neo4j中的时间序列表构造线图?

如何使用Cypher从Neo4j中的时间序列表构造线图?,neo4j,cypher,Neo4j,Cypher,如何使用Cypher从Neo4j中的时间序列表构造线图 例如: 这是一张桌子 id | event | timestamp ---------------------- 1 | event1 | 10:00 AM 1 | event2 | 10:15 AM 1 | event3 | 10:30 AM . | . | . . | . | . . | . | . 1 | event100 | 8:00 PM 2

如何使用Cypher从Neo4j中的时间序列表构造线图

例如:

这是一张桌子

id | event    | timestamp
----------------------
1  | event1   | 10:00 AM
1  | event2   | 10:15 AM
1  | event3   | 10:30 AM
.  |   .      |   .
.  |   .      |   .
.  |   .      |   .
1  | event100 | 8:00 PM

2  | event25  | 10:10 AM
2  | event30  | 10:20 AM
2  | event150 | 11:20 AM
.  |   .      |   .
.  |   .      |   .
.  |   .      |   .
所以我想按id对事件进行分组,并根据时间戳对它们进行排序,然后为每个组构建这样的图

event1 -> event2 -> ... -> event100


如果您愿意将添加到数据库中,那么您所描述的是一个可以使用apoc.nodes.link创建的链接列表

一些示例数据:

MERGE (e1: Event { id: 1, event: 'Event1', timestamp: localdatetime('20200323T10:00:00') })
MERGE (e2: Event { id: 1, event: 'Event3', timestamp: localdatetime('20200323T10:20:00') })
MERGE (e3: Event { id: 1, event: 'Event2', timestamp: localdatetime('20200323T10:05:00') })
MERGE (e4: Event { id: 2, event: 'Event5', timestamp: localdatetime('20200323T10:08:00') })
MERGE (e5: Event { id: 2, event: 'Event4', timestamp: localdatetime('20200323T10:00:00') })
然后,我们可以对链接列表进行分组、排序和创建:

MATCH (e: Event)
WITH e ORDER BY e.timestamp
WITH e.id as id, collect(e) as nodes
CALL apoc.nodes.link(nodes, 'PRECEDES')
RETURN nodes
MATCH (e: Event)
WITH e ORDER BY e.timestamp
WITH e.id as id, collect(e) as nodes
CALL apoc.nodes.link(nodes, 'PRECEDES')
RETURN nodes