【问题标题】:Return a path and a particular node type from the path从路径返回路径和特定节点类型
【发布时间】:2022-08-18 17:37:01
【问题描述】:

我说我有以下图表

(:A) -> (:B {name:\'B-1\'}) -> (:C) -> (:D)
     -> (:X) -> (:B {name:\'B-2\'} -> (:Z)

现在 A、B、C 等是具有不同节点属性的节点类型。即,两个 B 节点有一个 name 属性,具有不同的值来区分两者。现在说我想找出 A 到 Z 之间的路径,我可以

MATCH p1 = ((:A)-[*]-(:Z))
return p1

但我也想使用相同的查询返回两个 B 节点,或者有没有办法对 p1 进行后处理以提取 neo4j 中的两个 B 节点?

    标签: neo4j cypher


    【解决方案1】:

    您可以按如下方式扩展 RETURN:

    RETURN p1,
           [ n IN nodes(p1) WHERE n:B] AS arrayWithBNodes
    

    或者,如果您只想要名称:

    RETURN p1,
           [ n IN nodes(p1) WHERE n:B | n.name] AS arrayWithNamesOfBNodes
    

    【讨论】:

      【解决方案2】:

      您可能会发现将属性传播到下游节点或添加新关系很有帮助?您所说的“后处理”可能涉及具有成本(额外存储/内存)的冗余,但加速遍历可以证明该成本是合理的。加速来自缩短遍历,因为 1) 存在新关系或 2) 因为您在下游点开始遍历。 (:A) 中是否有可以放置在 (:Z) 或其他中间节点中的属性? A 和 Z 之间的关系是否合理?一次性对整个图进行增强将使每个单独的查询变得非常快。您还可以使用此策略来管理出处;现在跟踪 A 和 Z 的关系是很复杂的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 2020-09-01
        • 2023-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多