Warm tip: This article is reproduced from serverfault.com, please click

neo4j-密码路径thorugh仅节点列表

(neo4j - Cypher path thorugh only list of nodes)

发布于 2020-12-03 16:44:58

我正在使用cypher,我需要构建一个查询,该查询仅通过类型为“ REGION”的指定节点返回从节点“ START”到节点“ END”的路径,如图所示:

例子

例如,我想获取仅通过节点“ a”和“ b”的路径,因此我应该返回“仅1”和“仅2”,而不是“仅3”,因为它可以通过“ c” 。我的问题是找到一种创建路径的简单方法,而无需指定要排除的节点。

我用来创建图形的脚本:

MERGE (st:START)
MERGE (nd1:END {name: "Only 1"})
MERGE (nd2:END {name: "Only 2"})
MERGE (nd3:END {name: "Only 3"})
MERGE (nd4:END {name: "Other 2"})

MERGE (a:Region {name: "a"})
MERGE (b:Region {name: "b"})
MERGE (c:Region {name: "c"})
MERGE (d:Region {name: "d"})

MERGE (st)<-[:PART_OF]-(a)
MERGE (st)<-[:PART_OF]-(b)
MERGE (st)<-[:PART_OF]-(c)
MERGE (st)<-[:PART_OF]-(d)

MERGE (a)<-[:DEPENDS_ON]-(nd1)

MERGE (a)<-[:DEPENDS_ON]-(nd2)
MERGE (b)<-[:DEPENDS_ON]-(nd2)

MERGE (a)<-[:DEPENDS_ON]-(nd3)
MERGE (b)<-[:DEPENDS_ON]-(nd3)
MERGE (c)<-[:DEPENDS_ON]-(nd3)

MERGE (a)<-[:DEPENDS_ON]-(nd4)
MERGE (c)<-[:DEPENDS_ON]-(nd4)

谢谢。

Questioner
Yoni S
Viewed
0
Yoni S 2020-12-06 23:47:02

我设法做到以下查询:

MATCH (n:START)<-[:PART_OF]-(reg:Region)<-[:DEPENDS_ON]-(nd:END)
WHERE reg.name <> "a" AND reg.name <> "b"
WITH COLLECT(nd) as unaffected
MATCH (affected:END)
WHERE NOT affected in unaffected
RETURN affected