如何在neo4j中返回节点和树顶部之间的节点

如何在neo4j中返回节点和树顶部之间的节点,neo4j,Neo4j,我试图学习neo4j,并将从一个基本的员工/雇主示例开始,其中员工有一个经理,除非在树的顶部 我的结构看起来像employee->MANAGEDBY->manager->MANAGEDBY->manager->MANAGEDBY->manager。但是,每个经理下可以有多个员工或经理 我想做的是得到一份员工和主要老板(ceo/总裁/随便什么)之间所有经理的名单 起初,我从这样一个查询开始 MATCH(baseEmployee {Name: 'Josh'})-[:MANAGEDBY*0..

我试图学习neo4j,并将从一个基本的员工/雇主示例开始,其中员工有一个经理,除非在树的顶部

我的结构看起来像employee->MANAGEDBY->manager->MANAGEDBY->manager->MANAGEDBY->manager。但是,每个经理下可以有多个员工或经理

我想做的是得到一份员工和主要老板(ceo/总裁/随便什么)之间所有经理的名单

起初,我从这样一个查询开始

    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;