我的目标是在事件之间建立关系(' NEXT',' PREV')。我有一组包含两种类型节点和一种关系的数据。 (:Person)
为-[:AT]->
和(:Event)
。事实上,他们经常参加多项赛事(想想足球比赛)。每个(:Event)
都有.datenum
属性,这是自任何时候起无关紧要的天数。
我希望为每个人创建一个关系,根据:Event.datenum
使用关系-[:NEXT]->
将他们的事件链接在一起。因此,我希望看到(:Event)-[:NEXT]->(:Event)
。我在创建关系时遇到了困难,因为我无法想出一种方法来识别每个人的第一个(最小.datenum
)事件。我需要某种group by子句来建立.datenums
的排序来指导关系。
我对Cypher很陌生,所以我必须遗漏一些东西(或者仍然在RDBMS中思考)。有什么想法吗?谢谢 -
答案 0 :(得分:3)
我认为如果你想在一个特定的人参加一个活动之间创建一个订单,那么你需要介绍他们出席的概念,例如。
(:Person)-[:ATTENDED]->(:Attendance)-[:EVENT]->(:Event)
否则,如果您只是“AT”关系,那么就无法对这些关系进行排序,因为您无法在关系之间建立关系。
因此,假设您有出席的概念,那么您可以订购这样的出席情况:
MATCH (p:Person)-[:ATTENDED]->(attendance)
WITH p, attendance
ORDER BY p.name, attendance.timestamp
WITH p, COLLECT(attendance) AS attendances
FOREACH(i in RANGE(0, length(attendances)-2) |
FOREACH(si in [attendances[i]] |
FOREACH(si2 in [attendances[i+1]] |
MERGE (si)-[:NEXT]->(si2))))
希望这是有道理的。如果没有,请告诉我。