Neo4j:节点之间的多个关系组合

时间:2013-08-12 15:39:18

标签: neo4j

我一直在玩Neo4j并遇到一个我没有解决方案的问题,因此我的问题在这里。

对于我的特殊问题,我将描述一个捕获本质的简化版本。假设我有一个直接或通过绕道连接的位置图表:

  • 直接:(A) - [:GOES_TO] - >(B)
  • 间接:(A) - > [:GOES_THROUGH] - >(C) - [:COMES_BACK_TO] - >(B)

如果我希望在“Go”和“Finish”之间拥有GOES_TO关系,我可以轻松使用Cypher查询:

START a=node:NODE_IDX(Id = "Go"), b=node:NODE_IDX(Id = "Finish)
MATCH a-[r:GOES_TO*]->b
RETURN a,r,b

此处,NODE_IDX是节点上的索引(Id)。

我遇到困难的时候,我希望“Go”和“Finish”之间的所有路径都不是GOES_TO关系,而是多个GOES_THROUGH - >() - > COMES_BACK_TO关系组合(可变深度) )。

我不想过滤掉GOES_TO关系,因为节点之间有更多的关系,我不想容纳所有这些关系(动态地)。我可以设想一个可变深度,多关系的MATCH吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

让我重申一下我所相信的问题。

"If there is a path of the form (a)-[:X]->(b), find all other paths from a to b."

答案很简单:

MATCH p=(a)-[:X]->(b), q=(a)-[r*]->(b) 
WHERE p<>q 
RETURN r;