【发布时间】:2022-11-30 05:10:06
【问题描述】:
这是关于使用 LOAD csv 导入 neo4j csv 的。假设我的 csv 文件格式如下。
Id, OID, name, address, Parents , Children
1, mid1, ratta, hello@aa, ["mid250","mid251","mid253"], ["mid60","mid65"]
2, mid2, butta, ado@bb, ["mid350","mid365","mid320", "mid450","mid700"], ["mid20","mid25","mid30"]
3, mid3, natta, hkk@aa, ["mid50","mid311","mid543"], []
所以父母和孩子列基本上由 mids 组成......同时使用 LOAD CSV 将 csv 导入 neo4j ..我想创建以下节点和关系。
-
每行的节点(对于 csv 中的每个 id 列)
-
[:PARENT] 关系,通过匹配每行中的 OID 属性和父列中的 OID 属性。因此,作为处理第一行的示例...应该有四个节点(mid1、mid250、mid 251 和 mid 253)以及 mid1 和其他 3 个节点之间的 3 PARENT 关系。
-
[: CHILD ] 关系通过匹配每行中的 OID 属性和子列中的 OID 属性。
请帮忙!!
尝试对每个函数执行此操作,但结果不正确。我通过 python 脚本来完成它。只需要编辑密码查询。
def create_AAA(tx): tx.run( "LOAD CSV WITH HEADERS FROM 'file:///aaa.csv' AS row MERGE (e:AAA {id: row._id,OID: row.OID,address: row.address,name: row.name})" ) def create_parent(tx): tx.run( "LOAD CSV WITH HEADERS FROM 'file:///aaa.csv' AS row MERGE (a:AAA {OID: row.OID}) FOREACH (t in row.parents | MERGE (e:AAA {OID:t}) MERGE (a)-[:PARENT]->(e) )" ) def create_child(tx): tx.run( "LOAD CSV WITH HEADERS FROM 'file:///aaa.csv' AS row MERGE (a:AAA {OID: row.OID}) FOREACH (t in row.children | MERGE (e:AAA {OID:t}) MERGE (a)-[:CHILD]->(e) )" ) with driver.session() as session: session.write_transaction(create_AAA) session.write_transaction(create_parent) session.write_transaction(create_child)
【问题讨论】:
-
你能告诉我们你试过了吗?
-
是的,当然。我已经编辑了代码。你能检查一下吗。这里的问题是在创建节点时 OID 属性返回为 mid1 ....而在创建关系时 OID 属性是这样的 -> ['mid250']。因此,在创建关系时,它会创建另一个重复节点。