CYPHER在节点之间获取边

时间:2018-10-18 15:19:59

标签: cypher

我目前有一个图形,其中包含具有ID的路由,并且需要查找A和E之间的所有路由。由于所有路由都具有ID,因此我不需要做最短的路径。

我目前正在运行多个查询,希望能一次完成。

  1. 获取所有连接到A(1,2,3)的边缘

    MATCH(n:Node {Id:“ A”}})-[s:Edge]->(:Node)RETURN s.Id

  2. 获取所有连接到E(1,3)的边缘

    MATCH(:Node)-[s:Edge]->(n:Node {Id:“ E”})RETURN s.Id

  3. 保持它们匹配的ID(1,2)

  4. 检索ID匹配的所有边。

    对于每个结果,ID的匹配 匹配(s:Node)-[e:Edge {Id:id})->(e:Node)全部退回

(1)A-> B-> C-> D-> E

(2)A-> B-> C-> D-> E

可以在一个查询中完成吗?我有一种牵扯到UNWIND的感觉,而且我也找不到如何做左内连接的方法。

示例: 如果我想要A和E之间的所有路由,则应返回2。如果我想要A和D之间的所有边缘,则应返回3。

Sample

Node {

string Id;
}


Edge {
long Id;
}

1 个答案:

答案 0 :(得分:0)

这里最困难的部分是“所有rel id都相同的地方”,但这是您如何通过抓住路径中的第一个关系并将其与其余关系进行比较来进行检查的方法。

MATCH p=(start{id:'A'})-[*..10]->(end{id:'E'})
WHERE ALL(r in RELATIONSHIPS(p) WHERE r.id=HEAD(RELATIONSHIPS(p)).id)
RETURN p