在Neo4j中创建基于时间的('After','Before')关系

时间:2014-11-07 21:44:07

标签: neo4j

我的目标是在事件之间建立关系(' NEXT',' PREV')。我有一组包含两种类型节点和一种关系的数据。 (:Person)-[:AT]->(:Event)。事实上,他们经常参加多项赛事(想想足球比赛)。每个(:Event)都有.datenum属性,这是自任何时候起无关紧要的天数。

我希望为每个人创建一个关系,根据:Event.datenum使用关系-[:NEXT]->将他们的事件链接在一起。因此,我希望看到(:Event)-[:NEXT]->(:Event)。我在创建关系时遇到了困难,因为我无法想出一种方法来识别每个人的第一个(最小.datenum)事件。我需要某种group by子句来建立.datenums的排序来指导关系。

我对Cypher很陌生,所以我必须遗漏一些东西(或者仍然在RDBMS中思考)。有什么想法吗?谢谢 -

1 个答案:

答案 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))))

希望这是有道理的。如果没有,请告诉我。