我有一个查询,我不确定如何实现,或者在cypher
中是否有效。无论如何,这就是我想要做的事情。
我基本上有这张图:
我希望将nodes
/ relationships
从1
升级到3
(注意:空节点可以是任意数量的节点)。我还想要最后两个节点的所有(如果有的话),只有最后两个节点不在原始路径中。在这种情况下,红色边缘也应添加到结果中。
我已经知道了我想要的路径。所以在这个例子中,我会得到节点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中做到这一点,我会全力以赴。
答案 0 :(得分:1)
这对你有用吗?
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关系可选。