寻找两个节点之间的所有路径(一种节点除外)

时间:2018-12-28 22:38:50

标签: neo4j cypher

我正在尝试绘制两个节点之间的所有连接(路径)的图形,但具有特定类型节点的路径除外。

例如,我正在查找A和B之间的路径,除了通过X类型节点的连接。

因此,我想通过X类型的节点获得从A到B的所有路径,例如A-> C(与X不同的类型)-> B-好的,A-> D(X类型) )-> B不好。

路径上的节点数当然可以>2。

我写了这样的东西,但我不知道如何实现

MATCH (p1:Person {name:'Brad Pitt'}), (p2:Person {name:'Tom Hanks'}), 
paths=allShortestPaths((p1)-[*]-(p2))
UNWIND nodes(paths) as rel
RETURN paths, collect(distinct labels(rel)) as types

1 个答案:

答案 0 :(得分:0)

为此,您需要一个路径变量,并使用none()谓词来确保路径中没有要排除的节点类型。

以您的示例为例,如果我们有:Director节点,而您想排除这些节点的路径,则可以这样:

MATCH (p1:Person {name:'Brad Pitt'}), (p2:Person {name:'Tom Hanks'}), 
path=allShortestPaths((p1)-[*]-(p2))
WHERE none(node in nodes(path) WHERE node:Director)
RETURN path