neo4j匹配以第二关系结尾的关系中的0或更多的路径

时间:2016-12-01 10:31:15

标签: neo4j cypher

我希望匹配2个节点之间的路径,其中存在0或更多某种类型的关系但以特定的不同关系结束,例如它应匹配:

(a) -> [:GRANT] -> (b)
(a) - [:MEMBER] -> () -> [:GRANT] -> (b)
(a) - [:MEMBER] -> () - [:MEMBER] -> () -> [:GRANT] -> (b)

但不是

(a) - [:MEMBER] -> () - [:GRANT] -> () -> [:GRANT] -> (b)

我试过了:

MATCH (a) - [:MEMBER *] -> () - [:GRANT] -> (b)

但它仅在至少有一个成员关系时才有效(例如,()节点必须存在)。

我也尝试过这样的事情:

MATCH (a) - [:MEMBER *] -- [:GRANT] -> (b)

但是他们有语法错误。

有没有办法可选地匹配关系,同时确保链以特定的第二种关系类型结束?

1 个答案:

答案 0 :(得分:2)

你非常接近,你需要将变量长度关系的最小值设置为0,如下所示:

MATCH (a) - [:MEMBER *0..] -> () - [:GRANT] -> (b)

您现在有了这个想法,但这里是文档中link部分的{{3}}以防万一。