Neo4J - 测试具有未知深度的路径上的节点,仅限MATCH

时间:2016-11-13 13:14:48

标签: neo4j cypher

我想测试从节点a到节点b(只有MATCH语句)的路径中的所有节点,其中深度正在改变(可以是任何数字)。在下面的示例中,深度为2。

START a = node(86) 
MATCH p0 = a-[*..2]-b 
WHERE (b.attr = 'true') AND (a.attr = 'true')
RETURN p0 

我的问题是如何在不知道所需深度的情况下,使用attr = 'true'语句测试某个属性(MATCH)的a和b之间的节点。

我发现使用过滤器方法我可以过滤掉所有不需要的节点。 喜欢:

START a = node(86) 
MATCH p0 = a-[*..2]-b 
RETURN filter(x IN nodes(p0) WHERE x.attr = 'true')

但这不是我需要的,我需要使用MATCH

1 个答案:

答案 0 :(得分:1)

查看Cypher refcard,特别是List Predicates section。 all()函数应该可以解决问题。

类似的东西:

START a=node(86) 
MATCH p0=(a)-[*..2]-(b) 
WHERE ALL(node in nodes(p0) WHERE node.attr = true)
RETURN p0 

这只匹配模式中所有节点都具有该属性的模式。