Neo4j 密码查询已知路径

Neo4j cypher query a known path

我有一个查询,我不确定如何在 cypher 中实施或是否有效。无论如何,这就是我想要做的。

我基本上有这张图:

我想得到从13的所有nodes/relationships注意:空节点可以是任意数量的节点)。我还想要所有 if any 来自最后两个节点的传入边,并且只想要最后两个不在原始路径中的节点。在这种情况下,红色的边也应该添加到结果中。

我已经知道我想要的路径。所以在这个例子中,我会得到节点 ID 1, ..., 2, 3,我想我知道如何获取第一部分的路径。

MATCH (n)-->() WHERE n.nid IN ['1', '...', '2', '3'] RETURN n

我只是不知道如何获取路径中最后两个节点的红色边缘。另外,我没有给出节点 ID 4 和 5。我们可以假设连接 1, ..., 2, 3 的边都具有相同的 label,而所有其他边具有不同的 label

我想我需要使用 merge 但还不知道该怎么做。

或者如果有人知道如何在 gremlin 中执行此操作,我会洗耳恭听。

这对你有用吗?

MATCH ({nid: '1'})-[:t*]->(n2 {nid: '2'})-[:t]->(n3 {nid: '3'})
OPTIONAL MATCH ()-[t42]->(n2)
  WHERE (TYPE(t42) <> 't')
OPTIONAL MATCH ()-[t53]->(n3)
  WHERE (TYPE(t53) <> 't')
RETURN COLLECT(t42) AS c42, COLLECT(t53) AS c53;

我将左侧路径(在你的图表中)的所有关系都给出了 type "t"。 (术语 label 用于节点,而不是关系。)。你说我们可以假设其他关系没有那种类型,所以这个查询利用这个事实从结果中过滤掉类型 "t" 关系。

此查询还使 4-2 和 5-3 关系可选。