Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当条件为真时停止neo4j/cypher查询_Neo4j_Cypher - Fatal编程技术网

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

当条件为真时停止neo4j/cypher查询,neo4j,cypher,Neo4j,Cypher,我有一个图,其中每个节点代表一个java类,每个节点都有一个名为namespace的属性。我想匹配一个模式,其中起始节点和最终节点共享一个名称空间,但所有中间节点不共享该名称空间。对于有3类(A类->B类->C类)的情况,我有: START inside1=节点(*) 匹配内部1-[:使用]->外部1-[:使用]->内部2 其中inside1.namespace在1.namespace之外 和inside2.namespace=inside1.namespace 返回inside1.name、o

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

START inside1=节点(*)
匹配内部1-[:使用]->外部1-[:使用]->内部2
其中inside1.namespace在1.namespace之外
和inside2.namespace=inside1.namespace
返回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
START inside1=节点(*)
匹配内部1-[:使用]->外部1-[:使用*]->内部2
其中inside1.namespace在1.namespace之外
外部1.namespace内部1.namespace
和inside2.namespace=inside1.namespace
返回inside1.name、outside1.name、inside2.name
问题是我不想要中间节点与inside1共享同一名称空间的任何路径。所以我的问题是,我是否可以告诉它“当你碰到一个名称空间等于inside1.namespace的节点时停止”


谢谢。

不确定这是否最简洁,但我想这正是你想要的?首先,它获取查询的一般情况,然后将其限制为使用
with
进行最紧密的
匹配

 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
START inside1=节点(*)
匹配内部1-[:使用*]->外部1-[:使用]->内部2
其中内侧1.ns外侧1.ns
和inside2.ns=inside1.ns
内1、内2、外1
匹配内部1-[:使用]->外部2
其中内侧1.ns外侧2.ns
返回内部1、外部1、内部2

@PeterNeubauer感谢您的验证——希望这就是他想要的东西。:)
 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