2

是否可以在函数MATCH内部使用模式(使用 v1.8)?ALL

我想要做的是以下几点:我正在寻找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 控制台中的一个示例:

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
4

1 回答 1

8

您可以使用 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 关系连接,因此未返回任何内容。如果您想按照文字说明的方式进行操作,只需放下尾部即可。

这是你要找的吗?

于 2012-12-08T10:39:53.933 回答