我有一个图,其中每个节点代表一个Java类,每个节点都有一个称为 namespace 的属性。我想匹配一个模式,其中起始节点和最终节点共享一个 namespace ,但所有中间节点都不共享该 namespace 。对于存在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共享相同 namespace 的任何路径。所以我的问题是,无论如何,我能告诉它“当您命中 namespace 等于inside1.namespace的节点时停止”吗?

谢谢。

最佳答案

不知道这是否是最简洁的方法,但是我认为这符合您的要求吗?首先,它获得查询的一般情况,然后将其限制为只有最紧密的matchwith

 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

关于neo4j - 当条件为真时使neo4j/cypher查询停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12540701/

10-10 17:59