csv导入neo4j.如何引用foreach外部的节点



下面是密码导入脚本

LOAD CSV WITH HEADERS FROM 'sample.csv' AS line
CREATE (transaction:Transaction{trxid:TOINT(line.COMBINED)})
MERGE (party:Party{partyname:UPPER(line.OPARTY)})
FOREACH (bnk1 IN (CASE WHEN line.BANK_ID_1 IS NULL THEN [] ELSE [line.BANK_ID_1] END) |
MERGE (bank1:Bank{bankname:bnk1})
//relation
MERGE (transaction)-[:Trough]->(bank1)
)
FOREACH (bnk2 IN (CASE WHEN line.BANK_ID_2 is NULL THEN [] ELSE [line.BANK_ID_2] END) |
MERGE (bank2:Bank{bankname:bnk2})
//relation
)
FOREACH (bnk3 IN (CASE  WHEN line.BANK_ID_3  is NULL THEN  [] ELSE [line.BANK_ID_3] END) |
MERGE (bank3:Bank{bankname:bnk3})
//relation
MERGE (bank2)-[:next]->(bank3)
)
MERGE (party)-[:Initiated]->(transaction)
MERGE (transaction)-[:Trough]->(bank1)
MERGE(bank1)-[:next]->(bank2)
MERGE (bank2)-[:next]->(bank3)

我正在尝试创建bank1和bank2之间的关系。由于bank1和bank2节点是在foreach内部创建的,因此无法创建。请帮助解决这个

sample.csv组合,OPARTY,BANK_ID_1,BANK_ID_2,BANK_ID_31,阿伦,蟒蛇,轴心,2,reddy,ml,icici

我想要中的结果

reddy->2->ml->[]->icici

在这里,reddy通过ml库启动trx2,然后清空库,最后到达icici

arun ->1->boa->axis->[]

我看到了两种方法。你可以用WITHUNWIND传递数组,如下所示:

LOAD CSV WITH HEADERS FROM 'sample.csv' AS line
CREATE (transaction:Transaction{trxid:TOINT(line.COMBINED)})
MERGE (party:Party{partyname:UPPER(line.OPARTY)})
WITH (CASE WHEN line.BANK_ID_1 IS NULL THEN [] ELSE [line.BANK_ID_1] END) AS bank_ids_1
UNWIND bank_ids_1 and bank_id_1
MERGE (bank1:Bank{bankname:bank_id_1})

或者你可以多次浏览CSV:

LOAD CSV WITH HEADERS FROM 'sample.csv' AS line
CREATE (transaction:Transaction {trxid:TOINT(line.COMBINED)});
LOAD CSV WITH HEADERS FROM 'sample.csv' AS line
WHERE NOT(line.BANK_ID_1 IS NULL)
MERGE (:Bank{bankname:line.BANK_ID_1});
LOAD CSV WITH HEADERS FROM 'sample.csv' AS line
WHERE NOT(line.BANK_ID_2 IS NULL)
MERGE (:Bank{bankname:line.BANK_ID_2});
LOAD CSV WITH HEADERS FROM 'sample.csv' AS line
WHERE NOT(line.BANK_ID_1 IS NULL) AND NOT(line.BANK_ID_2 IS NULL)
MATCH
  (bank1:Bank{bankname:line.BANK_ID_1}),
  (bank2:Bank{bankname:line.BANK_ID_2})
MERGE(bank1)-[:next]->(bank2);

等等。。。当然,这是一个粗略的例子。

就我个人而言,我喜欢第二种选择,因为它易于理解。

最新更新