Neo4J:员工/经理层次结构



我已经加载了一个包含员工数据的csv,成功创建了标签和关系。我可以运行以下内容:

MATCH p=()-[r:is_over]->() RETURN p

我得到了经理和员工的集群,但他们是断开连接的。我如何获得这些关系的牢固联系?

编辑

这是我用来定义一切的设置:

USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM "file:///ldap.csv" AS row 
MERGE (C:Company {Company: row.company})
MERGE (N:Name {Name: row.user_name})
MERGE (M:Manager {Manager: row.manager_name})
MERGE (B:BU {BU: row.bus_unit})
MERGE (T:Title {Title: row.title})
MERGE (CC:CostCenter {CostCenter: row.cost_center})
MERGE (D:Dept {Dept: row.dept})
MERGE (E:Mail {Dept: row.mail})
MERGE (DN:DisplayName {DisplayName: row.display_name})
ON CREATE SET N.DisplayName = row.display_name,N.UserName = row.user_name,N.Mail = row.mail,N.Title = row.title,N.Dept = row.dept,N.BU =  row.bus_unit,N.Manager = row.manager_name,N.CostCenter = row.cost_center,N.Company = row.company
MERGE (N)-[:works_at]->(C)
MERGE (N)-[:has_bu]->(B)
MERGE (N)-[:has_title]->(T)
MERGE (N)-[:has_cc]->(CC)
MERGE (N)-[:works_in]->(D)
MERGE (M)<-[:is_over]-(DN);

M 和 DN 的格式相同。

您组织数据加载的方式,Manager总是超过DisplayName。 您没有完整的层次结构,因为DisplayName永远不会is_over Manager

因此,您获得一堆单独的断开连接的链是有道理的。 is_over关系始终从管理器转到显示名称。

我假设row.display_name给你一个与其他Manager匹配的名字。 我会考虑摆脱DisplayNameManager,并将两者建模为Employee. 然后就说(e1:Employee)-[:is_over]-> (e2:Employee)

您缺少的最后一部分是您需要确保数据中的某些display_name值与manager_name的其他行值匹配。 如果不是这样,那么无论您做什么,数据都不会连接。

我假设数据如下: manager_name,display_name A,B B,C

按照加载现在的工作方式,经理 A is_over显示名称 B,经理 B 位于显示名称 C 之上,但"显示名称 B"和"管理器 B"不同,没有连接。

最新更新