繁体   English   中英

Neo4j cypher查询已知路径

[英]Neo4j cypher query a known path

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

我基本上有这个图:

示例图

我想从13获取所有nodes / relationships注意 :空节点可以是任意数量的节点)。 我还希望从最后两个节点以及仅不在原始路径中的最后两个节点的所有传入边缘( 如果有) 在这种情况下,还应添加红色边缘以得到结果。

我已经知道我想要的路径。 因此,在此示例中,我将获得节点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;

我在左侧路径中(在您的图中)将所有关系都指定为“ t” type (术语label用于节点,而不是关系。)。 您说过我们可以假设其他关系不具有该类型,因此此查询利用了这一事实从结果中过滤出类型“ t”的关系。

该查询还使4-2和5-3关系成为可选关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM