如何使用Neo4j嵌套查询?

bob*_*o32 2 java neo4j nested-query

我正在尝试使用Java进行一种嵌套Neo4j查询,该查询首先标记节点的子集,然后尝试匹配其中的某些模式。更具体地说,这就像合并2个此类查询:

1-匹配(n)-[r:RELATIONSHIP * 1..3]->(m)设置m:LABEL

2-匹配(p:LABEL)-[r2:RELATIONSHIP]->(q:OTHERLABEL),其中r2.time <100返回p,r2,q

有没有一种方法可以使用Java函数engine.execute()将两个查询合并为一个?

cyb*_*sam 5

通常,查询2中的“ p”对应于查询1中的“ m”的超集。如果这是您的意图,则应该可以进行以下操作。请注意,这2个MATCH语句没有公共变量,但是Cypher语法要求使用WITH,因此我随意选择了变量'm'传递给第二个MATCH(即使它将被忽略)。

MATCH (n)-[r:RELATIONSHIP*1..3]->(m)
SET m:LABEL
WITH m
MATCH (p:LABEL)-[r2:RELATIONSHIP]->(q:OTHERLABEL)
WHERE r2.time<100
RETURN p,r2,q;
Run Code Online (Sandbox Code Playgroud)

如果您希望'm'和'p'完全相同,则只需将'(p:LABEL)'替换为'(m)':

MATCH (n)-[r:RELATIONSHIP*1..3]->(m)
SET m:LABEL
WITH m
MATCH (m)-[r2:RELATIONSHIP]->(q:OTHERLABEL)
WHERE r2.time<100
RETURN m,r2,q;
Run Code Online (Sandbox Code Playgroud)

  • 试试这个:MATCH(n)-[r:RELATIONSHIP * 1..3]-&gt;(m)设置m:带有m的标签MATCH(m)-[r2:RELATIONSHIP]-&gt;(q:OTHERLABEL)与m,计数(m)AS cm,r2,q其中r2.time &lt;100 AND cm = 3返回m,r2,q; (2认同)