neo4j图找到从父级到每个子级的无关系的所有路径

问题描述 投票:0回答:1

我想将父节点到父节点的所有当前路径打印到图中的整个树。数据库包含Sr管理器作为根节点。数据库仅包含按层次结构维护的单个树,没有图。员工和职位仅存在两种类型的节点。员工节点通过:boss_of连接到其他员工节点,因为每个员工只有一个与:has_power关系连接的职位节点。不同位置之间没有无连接/关系。我想以以下方式打印所有存在的路径。 高级经理将始终出现在路径的开头请参见图。

Sr Manager 
Sr Manager -> Manager 
Sr Manager -> Manager -> jr developer
Sr Manager -> Manager -> sr developer
Sr Manager -> Manager -> tester
Sr Manager -> Manager -> tester -> BA
Sr Manager -> Manager -> tester -> BA -> jrBA 
Sr Manager -> Manager -> tester -> BA -> jrBA -> content writer[enter 

依此类推.....

抱歉!图结构发生了一些变化,还有一种类型的节点被连接到Employee,标记为Domain,所以在图中,存在3种类型的节点Employee,Position和Domain,而Position和Domain都被连接到Employee,其方式为:has_power和:has_ref关系相对应,并且Position和Domain之间没有关系

这里是例子enter image description hereenter image description here

database graph neo4j path hierarchy
1个回答
0
投票

好的,因此您需要在所有层次结构上进行匹配(从没有任何首领的根开始),然后为层次结构中的每个节点替换其位置,然后得到不同的结果。像这样的东西:

MATCH path = (top:Employee)-[:boss_of*0..]->(emp)
WHERE NOT ()-[:boss_of]->(top)
WITH DISTINCT [node in nodes(path) | [(position)-[:has_power]->(node) | position][0]] as positions
ORDER BY size(positions) DESC

这使用列表理解来更改路径中节点的每个元素,并使用模式理解来从雇员匹配到雇员所担任的位置并将该位置投影到列表。

如果只需要列表中的文本结果,那么您将需要访问用于存储职位名称的任何属性(名称?)。

© www.soinside.com 2019 - 2024. All rights reserved.