我正在尝试为批次的状态更改执行模型。我捕获了各种变化,我有一个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(其他),那么我无法弄清楚如何停止为最后一个节点创建关系。不确定如何在创建关系时设置条件,以便在下一个节点为空时停止创建关系
答案 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
节点集合。