0

我一直在玩 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?

谢谢!

4

1 回答 1

1

让我重申一下我认为被问到的问题。

"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;
于 2014-02-01T23:50:18.560 回答