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

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

下面是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_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);
等等。。。当然,这是一个粗略的例子

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