2

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

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

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

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

4

1 回答 1

6

查询#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;

如果您希望 '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;
于 2014-04-08T18:50:51.303 回答