使 neo4j/cypher 查询在条件为真时停止



我有一个图表,其中每个节点代表一个java类,每个节点都有一个称为命名空间的属性。我想匹配一种模式,其中起始节点和最终节点共享一个命名空间,但所有中间节点都不共享该命名空间。对于有 3 个类(A 类 -> 类 B -> 类 C 类)的情况,我有:

START inside1 = node(*) 
match inside1 -[:USES]-> outside1 -[:USES] -> inside2  
where inside1.namespace <> outside1.namespace 
  and inside2.namespace = inside1.namespace  
return inside1.name, outside1.name, inside2.name

这似乎工作正常。当我尝试扩展它时,我尝试了:

START inside1 = node(*) 
match inside1 -[:USES]-> outside1 -[:USES*] -> inside2  
where inside1.namespace <> outside1.namespace 
  and outside1.namespace <> inside1.namespace 
  and inside2.namespace = inside1.namespace  
return inside1.name, outside1.name, inside2.name

问题是我不想要任何中间节点与 inside1 共享相同命名空间的路径。 所以我的问题是,无论如何我是否可以告诉它"当你击中一个命名空间等于 inside1.namespace 的节点时停止"?

谢谢。

不确定它是否是最简洁的,但我认为这符合您的要求?首先,它获取查询的一般情况,然后将其限制为仅具有with的最严格的match

 START inside1 = node(*) 
 MATCH inside1-[:USES*]->outside1-[:USES]->inside2 
 WHERE inside1.ns <> outside1.ns 
   AND inside2.ns = inside1.ns 
  WITH inside1, inside2, outside1 
 MATCH inside1-[:USES]->outside2 
 WHERE inside1.ns <> outside2.ns 
RETURN inside1, outside1, inside2

http://console.neo4j.org/r/m8iqo5

最新更新