Neo4j Cypher 使用 csv 构建图形

Neo4j Cypher building a graph using csv

下午好! 我有一个具有以下结构的 csv 文件:

numberRow,A,B,C
0,a1,b1,c1
1,,,c2
2,,b2,c3
3,a2,b3,c4
4,,,c5
...

我上传使用,其他节点,脚本类似

LOAD CSV WITH HEADERS FROM 'file:///file.csv' AS row
WITH row
  WHERE row.a IS NOT NULL
CREATE
  (aa:A {numberRow: toInteger(row.numberRow), value: row.a});

我的任务是得到如下形式的图表

CREATE
  (a1:A {numberRow: 0, value: 'a1'})-[:R]-(b1:B {numberRow: 0, value: 'b1'})-[:R]->(c1:C {numberRow: 0, value: 'c1'}),
  (a1)-[:R]-(b1)-[:R]->(c2:C {numberRow: 1, value: 'c2'}),
  (a1)-[:R]-(b2:B {numberRow: 2, value: 'b2'})-[:R]->(c3:C {numberRow: 2, value: 'c3'}),
  (a2:A {numberRow: 3, value: 'a2'})-[:R]-(b3:B {numberRow: 3, value: 'b3'})-[:R]->(c4:C {numberRow: 3, value: 'c4'}),
  (a2)-[:R]-(b3)-[:R]->(c5:C {numberRow: 4, value: 'c5'})

请告诉我如何请求绘制图形,可能会同时加载所有节点,在此先感谢

您的案例需要跟踪前几行中的项目。我建议首先创建一个完整的数组,然后从那里合并。可以使用 REDUCE 创建一个完整的数组并循环遍历项目:

WITH [ 
       {numberRow:0,A:'a1',B:'b1',C:'c1'},
       {numberRow:1,C:'c2'},
       {numberRow:2,B:'b2',C:'c3'},
       {numberRow:3,A:'a2',B:'b3',C:'c4'},       
       {numberRow:4,C:'c5'}      
     ] AS rows
UNWIND rows AS row

WITH row ORDER BY row.numberRow ASC
WITH COLLECT(row) AS rows

RETURN REDUCE(arr=[], row IN rows |
            arr
            + {
                numberRow: row.numberRow,
                A:COALESCE(row.A,LAST(arr).A),
                B:COALESCE(row.B,LAST(arr).B),
                C:COALESCE(row.C,LAST(arr).C)
              }
           ) AS completeArray