Neo4j-如何组合来自多个CSV的节点和关系
我有两个csv文件,其中的数据如下:Neo4j-如何组合来自多个CSV的节点和关系,neo4j,Neo4j,我有两个csv文件,其中的数据如下: "email.csv" name,email mike smith,msmith@test.com mike smith,xsmith@test.com mary smith,msmith@test.com john roberts,jroberts@test.com "phone.csv" name,phone mike smith,714-555-5555 mary smith,714-456-4567 john roberts,714-555-555
"email.csv"
name,email
mike smith,msmith@test.com
mike smith,xsmith@test.com
mary smith,msmith@test.com
john roberts,jroberts@test.com
"phone.csv"
name,phone
mike smith,714-555-5555
mary smith,714-456-4567
john roberts,714-555-5555
john roberts,714-456-4567
然后,当我使用此查询时:
LOAD CSV WITH HEADERS FROM 'file:///email.csv' AS email
WITH email
MERGE(e:Email_name{name:email.name})
MERGE(ee:Email_email{email:email.email})
MERGE(e)-[:has_email]->(ee);
LOAD CSV WITH HEADERS FROM 'file:///phone.csv' AS phone
WITH phone
MERGE (p:Phone_name{name:phone.name})
MERGE (pp:Phone_phone{phone:phone.phone})
MERGE (p)-[:has_phone]->(pp);
MATCH p=()-[*]->() RETURN p;
我得到的结果是:
我试图实现的是,相同名称的节点将被合并,电话和电子邮件将从相同名称的节点中产生。例如,“john roberts”名称节点的电子邮件关系和电话关系都来自该节点,并且没有分开 像这样做怎么样 为名称合并创建一个
:User
标签。您可以在以后设置电子邮件标签
LOAD CSV WITH HEADERS FROM 'file:///email.csv' AS email
WITH email
MERGE(e:User {name:email.name}) SET e:Email_name
MERGE(ee:Email_email{email:email.email})
MERGE(e)-[:has_email]->(ee);
在第二个查询中使用:User
标签,以便合并
将查找预先存在的名称节点(如果确实存在),而不是创建新的名称节点
LOAD CSV WITH HEADERS FROM 'file:///phone.csv' AS phone
WITH phone
MERGE (p:User {name:phone.name}) SET p:Phone_name
MERGE (pp:Phone_phone{phone:phone.phone})
MERGE (p)-[:has_phone]->(pp);
工作得很好!。谢谢