首页 > 解决方案 > 如何使用 Cypher 从 Neo4j 中的时间序列表构建折线图?

问题描述

如何使用 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

event25 -> event30 -> event150 -> ...

标签: neo4jcypher

解决方案


如果您乐于将APOC 插件添加到您的数据库中,那么您所描述的是一个可以使用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

在此处输入图像描述


推荐阅读