如何根据常见的Epochtime属性创建关系

时间:2017-05-11 01:40:37

标签: neo4j cypher

我正在尝试为批次的状态更改执行模型。我捕获了各种变化,我有一个Epoch时间列来跟踪这些变化。我设法通过以下代码完成了这项工作:

MATCH(n:Batch), (n2:Batch) 
WHERE n.BatchId = n2.Batch
WITH n, n2 ORDER BY n2.Name
WITH n, COLLECT(n2) as others
WITH n, others, COALESCE(
    HEAD(FILTER(x IN others where x.EpochTime > n.EpochTime)),
    HEAD(others)
    ) as next
CREATE (n)-[:NEXT]->(next)
RETURN n, next;

由于HEAD(其他),它使我的图形循环,并且不会在具有最大纪元时间的节点处停止。如果我删除了HEAD(其他),那么我无法弄清楚如何停止为最后一个节点创建关系。不确定如何在创建关系时设置条件,以便在下一个节点为空时停止创建关系

1 个答案:

答案 0 :(得分:1)

这可能会做你想要的:

MATCH(n:Batch)
WITH n ORDER BY n.EpochTime
WITH n.BatchId AS id, COLLECT(n) AS ns
CALL apoc.nodes.link(ns, 'NEXT')
RETURN id, ns;

它按Batch命令所有EpochTime个节点,然后收集具有相同Batch值的所有BatchId个节点。对于每个集合,它调用apoc过程apoc.nodes.link将所有节点(按时间顺序)与NEXT关系链接在一起。最后,它返回每个不同的BatchId及其有序的Batch节点集合。