是否可以MATCH在ALL函数内部使用模式(使用v1.8)?
我想要做的是以下内容:我正在走MATCH一条路p = (a)-->(b)-->(c)-->(d).但是,此路径上的所有节点必须具有r来自某个节点的其他传入关系.让我试着用ASCII清楚地说明这一点:
(a)-->(b)-->(c)-->(d)
^ ^ ^
|r |r |r
( ) ( ) ( )
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式使用该ALL功能,或者我必须添加这样的其他MATCH模式:
START ...
MATCH (a)-->(b)-->(c)-->(d)..., ()-[:r]->(b), ()-[:r]->(c), ...
RETURN ...
Run Code Online (Sandbox Code Playgroud)
更新:
以下是Neo4j控制台中的示例:
START n=node(0)
CREATE (a), (b), (c), (d), (e),
n-[:rel1]->a, n-[:rel1]->b, n-[:rel1]->d, n-[:rel1]->e,
a-[:rel2]->b-[:rel3]->d, a-[:rel2]->c-[:rel3]->e
START n=node(0)
MATCH n -[:rel1]-> x -[:rel2]-> y -[:rel3]-> z, ()-[:rel1]->y, ()-[:rel1]->z
RETURN z
Run Code Online (Sandbox Code Playgroud)
您可以使用WHERE ALL执行此操作,如下所示:
START n=node(0)
MATCH path = n -[:rel1]-> x -[:rel2]-> y -[:rel3]-> z
WHERE ALL(n in tail(nodes(path)) WHERE ()-[:rel1]->n)
RETURN z
Run Code Online (Sandbox Code Playgroud)
tail(nodes(path))返回路径中除第一个节点之外的所有节点.在您的示例中,起始节点未与rel1关系连接,因此未返回任何内容.如果你想像你的文字一样解释它,只需放下尾部即可.
这是你在找什么?