我想打印图形中存在的整个树从父节点到子节点的所有路径。数据库包含 Sr 管理器作为根节点。数据库只包含维护在层次结构中的单个树,没有图形。仅存在 2 种类型的节点:员工和职位。员工节点通过 :boss_of 连接到其他员工节点,其中每个员工只有一个与 :has_power 关系连接的 Position 节点。不同职位之间没有联系/关系。我想通过以下方式打印存在的所有路径。高级经理将始终在路径的起点出现请看图。
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
等等.....
抱歉! 图结构有一点变化,还有一种类型的节点与标记为域的员工相连,因此在图中存在 3 种类型的节点 雇员、职位和域 ,而职位和域都与员工 :has_power 和 :has_ref 关系 resp 相连,职位和域之间没有关系
以下是示例 在此处输入图像描述 在此处输入图像描述
好的,所以你需要匹配所有的层次结构(从没有任何老板的根开始(,然后对于层次结构中的每个节点将其替换为它的位置,然后得到不同的结果。像这样:
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
这使用列表推导来更改路径中节点的每个元素,并使用模式推导来匹配从员工到员工所担任的职位,并将该位置投影到列表中。
如果您只想从列表中获得文本结果,则需要访问用于存储职位名称的任何属性(名称?