我正在使用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)
谢谢。
我设法做到以下查询:
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