是否有可能在ALL
function内使用MATCH
模式(使用v1.8)?
我要做的是以下内容:我MATCH
路径p = (a)-->(b)-->(c)-->(d)
。但是,此路径上的所有节点必须具有来自某个节点的其他传入关系r
。让我试着用ASCII清楚地说明这一点:
(a)-->(b)-->(c)-->(d)
^ ^ ^
|r |r |r
( ) ( ) ( )
我可以以某种方式使用ALL
函数,或者我是否必须添加其他MATCH
模式:
START ...
MATCH (a)-->(b)-->(c)-->(d)..., ()-[:r]->(b), ()-[:r]->(c), ...
RETURN ...
的更新 的
以下是Neo4j console中的示例:
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
答案 0 :(得分:7)
您可以使用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
tail(nodes(path))返回路径中除第一个节点之外的所有节点。在您的示例中,起始节点未与rel1关系连接,因此未返回任何内容。如果你想像你的文字一样解释它,只需放下尾部。
这是你想要的吗?