上传与多个关系的csv

问题描述:

我试图建立一个除了投资者以外的生态系统合作在一起的公司名单(与员工层次结构)之间的关系。我的csv中有6列是:公司,投资者,客户(J标记为公司,但是关系客户),CompanyX(X标记为公司,但是表示合伙公司的关系),员工(雇员)和EmployeeL L代表层次结构)。上传与多个关系的csv

LOAD CSV WITH HEADERS FROM 'FILE:///ecosystem.csv' AS line 
MERGE (C:Company {Company: line.Company }) 
MERGE (I:Investor {Investor: line.Investor }) 
MERGE (J:Customer {Company: line.Company }) 
MERGE (X:CompanyX {Company: line.Company }) 
MERGE (N:Employee {Employee: line.Employee }) 
MERGE (L:EmployeeL {Employee: line.Employee }) 
MERGE (C)<-[:works_for]-(N) 
MERGE (L)<-[:reports_to]-(N) 
MERGE (J)<-[:Customer]-(C) 
MERGE (X)<-[:Partners]->(C) 
MERGE (C)<-[:Investor]-(I); 

我是否过分复杂呢?我是Cypher的新手,我不确定我是否正确地做了这件事,而且上次做了类似上传的上传,我不得不清理我的数据库。又如何为J/I/C输入一个空值,因为并不是所有的层次都完成了?当存在空值时,我无法上传csv。

+0

为什么你3x合并在同一个值? MERGE(C:Company {Company:line.Company}) MERGE(J:客户{公司:line.Company}) MERGE(X:CompanyX {Company:line.Company})' –

+0

我不确定还可以使用单一标签作为公司来区分合作伙伴,客户和公司。我发现在创建关系时,如果公司的名称既是客户也是合作伙伴,那么它会创建单独的节点,并且关系没有连接。你有其他建议吗? – AngryAsianMan

+0

这听起来让你感到困惑与标签的关系。尝试缩小标签的范围,使其独立于事物本身,然后让这些关系与其他事物相互对话。例如:公司看起来像一个很好的标签,所以要保持这一点,但是:客户没有什么意义,因为这只是一个:与另一个公司有客户关系的公司。你绝对不需要:CompanyX或:EmployeeL。你的财产名称似乎也是多余的。为什么不把'名称'作为所有这些节点的公共属性? – InverseFalcon

如果你在你的CSV只有三列,我想创建这样的查询:

LOAD CSV WITH HEADERS FROM 'FILE:///ecosystem.csv' AS line 
MERGE (C:Company {name: line.Company }) 
MERGE (I:Investor {name: line.Investor }) 
MERGE (N:Employee {name: line.Employee }) 
MERGE (C)<-[:Investor]-(I) 
MERGE (C)<-[:works_for]-(N) 

您应该避免使用birectional方向为:works_for:reports_to。检查这article

+0

谢谢。关于如何在我的csv文件中建立关系的任何建议然后在cypher中反映出来?我希望在合作伙伴,客户等公司之间建立关系。如果我错了,请纠正我的错误,但我认为您可以插入具有关系类型的列并使用密码进行上载。 – AngryAsianMan

+0

如果你使用apoc程序库,如CALL apoc.create.relationship(person1,'KNOWS',{key:value,...},person2) –

+0

谢谢,我会给你一个镜头。另一方面,是否有可能在名称节点上有多列信息?例如,姓名是John Doe,职位是销售总裁,位于加利福尼亚州等。如果有,关于如何将这些信息合并到一个名称节点中的建议? – AngryAsianMan