根据其他关系建立关系

时间:2014-10-22 04:32:06

标签: neo4j

我是Neo4j和Graph数据库的新手。我已经创建了示例数据库并尝试学习。我在那个和连接节点下创建了正常的关系。我有一个问题就是可以根据其他关系建立关系。

例如:如果我采用公司组织的例子,那么公司只有一名CEO。该公司有很多员工。像软件工程师LEADESBY团队负责人和团队负责人MANAGEDBY是项目经理。现在支持我想确定谁是项目经理,然后我创建从软件工程师到项目经理的关系,但我不想这样做。取而代之的是,我将考虑称为LEADES的新关系 - > MANAGEDBY是ProjectManager。这可能吗?

1 个答案:

答案 0 :(得分:2)

好的,所以这是你在cypher中描述的情况:

CREATE (se:SoftwareEngineer {name: "Bob"})-[:LEAD_BY]->(tl:TeamLeader {name: "Mark"});

MATCH (tl:TeamLeader {name: "Mark"})
CREATE (tl)-[:MANAGED_BY]->(pm:ProjectManager {name: "Gil"})

Bob软件工程师由团队领导Mark领导。 Mark由项目经理“Gil”管理。

现在,从这里开始,有几种方法可以解释您的问题:

我们如何确定项目经理是谁?

您指定如果LEAD_BY关系后跟MANAGED_BY关系,那么该人就是PM。所以不,你不需要直接从SoftwareEngineerProjectManager创建一个新的关系,而只需要遍历两个关系,如下所示:

MATCH (p)-[:LEAD_BY]->(q)-[:MANAGED_BY]->(pm)
RETURN pm;

如果你可以更具体(比如使用我上面做的标签),那么你也可以这样做:

MATCH (se:SoftwareEngineer)-[:LEAD_BY]->(tl:TeamLead)-[:MANAGED_BY]->(pm:ProjectManager)
RETURN se, tl, pm;

这将为您提供所有3级管理关系的完整列表。

通常,您可以使用这些密码查询在模式中深入导航多个级别,只要您可以指定它。

相关问题