使用Cypher创建分层结构



我是neo4j的新手,整天我一直困扰着一个简单的问题。这应该是一个非常简单的修复程序,但我只是无法正确解决!我正在尝试建模公司的层次结构(从首席执行官到实习生(。我有一个带有员工_id号码及其职位的CVS文件。在同一文件中,我有另一列具有员工经理的ID号。因此,在每一行中,我都有3个单元格:员工的ID,职位标题,员工经理的ID,我有30行(目前(。

(例如:在员工ID旁边有雇员的ID,因为Sam是John的经理。Sam也出现在"员工"列中,而他的ID号旁边是Mark的ID,因为Mark是Sam的经理。等等(

看起来与经典的示例演员 - [acted_in] ->电影,但是在这种情况下,我没有30个演员节点和30个电影节点,我不确定如何在同一同一之间建立30个关系30个节点。

每当我尝试创建Works_under关系时,我最终都会创建新的节点,而我无法让Neo4J意识到关系右侧的节点已经在图中。

我确定这是一个简单的问题,但是正如我所说,我是Neo4J的新手,我真的可以使用帮助!

更新:我通过将管理人员的ID作为员工节点中的属性添加来使其正常工作。

从" file:///personnel.csv"作为行fieldTerminator';'

加载带有标头的CSV

merge(person:person {雇员_id:row.id,job_title:row.jobtitle,manager_id:row.managerid}(

与 *

匹配(p1:perse(

匹配(p2:perse(

其中p2.employee_id = p1.manager_id

Merge(P1( - [R:Works_under] - (P2(

我敢肯定,必须有一种方法可以使我添加经理ID作为属性,但我无法弄清楚:(

如果您最终获得了新的意外节点,那么您可能会在整个模式上使用合并,而不是首先在每个节点上合并,然后才合并它们之间的关系。

合并就像是一场比赛,然后是创建(如果比赛未成功(。未绑定的模式的任何元素都将被创建。

这是一篇知识库文章,讲述了更好地了解合并的工作方式。

确保您已经在业务ID上创建了约束

 CREATE CONSTRAINT ON (n:<LabelName>) ASSERT n.<propertyKey> IS UNIQUE

最新更新