返回路径和路径中的特定节点类型

n53p2ov0  于 2022-10-01  发布在  其他
关注(0)|答案(2)|浏览(151)

我说我有下面的图表

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

现在A、B、C等是具有不同节点属性的节点类型。即,两个B节点具有具有不同值的名称属性以区分这两个节点。现在说我想找出从A到Z的路径,我可以做

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

但是我也想使用相同的查询返回两个B节点,或者有没有一种方法可以后处理p1来提取neo4j中的两个B节点?

ztmd8pv5

ztmd8pv51#

您可以按如下方式扩展返还范围:

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

或者,如果你只想要名字:

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

ddhy6vgd2#

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

相关问题