如何在neo4j中返回节点和树顶部之间的节点
我试图学习neo4j,并将从一个基本的员工/雇主示例开始,其中员工有一个经理,除非在树的顶部 我的结构看起来像employee->MANAGEDBY->manager->MANAGEDBY->manager->MANAGEDBY->manager。但是,每个经理下可以有多个员工或经理 我想做的是得到一份员工和主要老板(ceo/总裁/随便什么)之间所有经理的名单 起初,我从这样一个查询开始如何在neo4j中返回节点和树顶部之间的节点,neo4j,Neo4j,我试图学习neo4j,并将从一个基本的员工/雇主示例开始,其中员工有一个经理,除非在树的顶部 我的结构看起来像employee->MANAGEDBY->manager->MANAGEDBY->manager->MANAGEDBY->manager。但是,每个经理下可以有多个员工或经理 我想做的是得到一份员工和主要老板(ceo/总裁/随便什么)之间所有经理的名单 起初,我从这样一个查询开始 MATCH(baseEmployee {Name: 'Josh'})-[:MANAGEDBY*0..
MATCH(baseEmployee {Name: 'Josh'})-[:MANAGEDBY*0..]-(managers)
RETURN managers.Name;
这似乎不仅显示了我的经理和他/她的经理等等,而且似乎还显示了每个人,当我想显示的是一个类似于
Josh,
Boss,
BossBoss,
BossBossBoss,
CEO
经过一些搜索和一些运气之后,我通过使用下面的查询设法靠近了
MATCH p=(baseEmployee {Name: 'Josh'})-[:MANAGEDBY*0..]-(managers)
WHERE NOT(managers-[:MANAGEDBY]->())
RETURN p;
我只是在学习neo4j,所以我对这里发生的事情的最好猜测是,我从自己身上找到了第一个没有管理关系的经理。我的问题是,这将返回一条路径,我更希望只包含一个经理列表
不执行p=查询是否可以执行此操作?您必须将关系的方向添加到路径查询中! 否则你也会从Josh往下探索 如果您在0
0..
处开始varlength查询,那么您也会返回Josh。
默认值为1..
,因此您也可以将其禁用
您可以使用节点(p)
返回路径的节点
如果希望每个节点有一行,可以执行以下两种操作之一:
或者将集合放回行中
MATCH p=(baseEmployee {Name: 'Josh'})-[:MANAGEDBY*]->(managers)
WHERE NOT(managers-[:MANAGEDBY]->())
UNWIND nodes(p) as n
RETURN n;
或者将每个路径的最后一个节点返回到根
MATCH p=(baseEmployee {Name: 'Josh'})-[:MANAGEDBY*]->(managers)
RETURN managers;
我不知道你可以指定关系的方向。我认为类似MATCH(baseEmployee{Name:'Josh'})-[:MANAGEDBY*0..]>(managers)返回managers.Name;它完美地满足了我的需求,因为它从我到树的最高层次,似乎只包括树中的双亲,从不向下移动
MATCH p=(baseEmployee {Name: 'Josh'})-[:MANAGEDBY*]->(managers)
RETURN managers;