【问题标题】:neo4j graph find all path from parent to each child without relationshipneo4j 图找到从父母到每个孩子的所有路径,没有关系
【发布时间】:2020-01-28 22:52:31
【问题描述】:

我想为图中存在的整个树打印从父节点到子节点的所有路径。数据库包含作为根节点的 Sr 管理器。数据库仅包含在层次结构中维护的单个树,没有图形。只有 Employee 和 Position 两种类型的节点存在。 Employee 节点通过 :boss_of 连接到其他员工节点,因为每个员工只有一个 Position 节点与 :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 都通过 :has_power 连接到 Employee和:has_ref 关系resp 和Position 和Domain 之间没有关系

以下是示例 enter image description here enter image description here

【问题讨论】:

    标签: database graph neo4j path hierarchy


    【解决方案1】:

    好的,所以您需要匹配所有层次结构(从没有任何老板的根开始),然后为层次结构中的每个节点替换它的位置,然后得到不同的结果。像这样的:

    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
    

    这使用列表推导来更改路径中节点的每个元素,并使用模式推导从员工匹配到员工持有的职位并将该职位投射到列表中。

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

    【讨论】:

    • 您好,感谢您的回答!抱歉,我对这个 Cypher 很陌生。这里的位置是变量还是标签??因为标签的实际名称是“位置”。那么这里应该返回什么,以便每个 Position 父级可以在其前面有子级列表?所以基本上我希望结果中的 2 列 col1 将具有父名称,而 col2 将具有其子项的列表。并且位置名称的属性是'name'
    • 在这种情况下,position 是一个变量,指的是通过:has_power 关系连接到node(您之前匹配的 :Employee 节点)的节点。因为您的图结构只有 :Position 节点通过 :Employee 节点通过这种关系连接,所以我们实际上不需要按节点的标签进行过滤,只要知道跨越那种关系就是我们想要的节点就足够了,并且我们从相关员工中创建一个职位列表。
    • 您能否提供一个示例结果,以便我更好地了解您希望返回的格式如何?现在 Sr Management 节点始终位于路径的开头,您是否总是希望该节点位于开头?或者你也想要层次结构?并且您只想要直接的孩子,还是上面示例结果中指定的任何深度的所有可到达的孩子?
    • 由于 sr manager 是所有节点的父节点,它将出现在根节点,然后是相关节点,因此显然对于每个路径,sr manager 将出现在开始时。
    • 抱歉!图结构有一点变化,还有一种节点与 Employee 连接,标记为 Domain,因此在图中有 3 种类型的节点存在 Employee、Position 和 Domain,而 Position 和 Domain 都通过 :has_power 连接到 Employee和 :has_ref 关系 resp 并且 Position 和 Domain 之间没有关系。
    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 2011-12-19
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多