csv导入neo4j。如何引用foreach外部的节点
下面是cypher导入脚本csv导入neo4j。如何引用foreach外部的节点,neo4j,cypher,Neo4j,Cypher,下面是cypher导入脚本 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
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
合并、交易方、银行ID 1、银行ID 2、银行ID 3
阿伦、博阿、安讯士1号,
2,雷迪,马里兰州,icici
我想知道结果
reddy->2->ml->[]->icici
在这里,reddy通过ml银行启动trx 2,然后清空银行,最后是icici
arun ->1->boa->axis->[]
我认为有两种方法可以解决这个问题。您可以使用
with
传递数组,然后像这样展开它:
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);
等等。。。当然,这是一个粗略的例子
就我个人而言,我喜欢第二种选择,因为它易于理解。我认为有两种方法可以做到这一点。您可以使用with
传递数组,然后像这样展开它:
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);
等等。。。当然,这是一个粗略的例子
就个人而言,我喜欢第二种选择,因为它易于理解