1

我有一个移动关系的查询,但如果存在现有的目标关系,它们不会被替换,所以我最终得到了两个相似的连接。

    match (new:state) where new.val = {new}
    match (b:state)-[r1:q]->(p:state)-[r2:q]->(n:state)
    where b.val = {blast} and p.val = {past} and n.val = {now}
    merge (b)-[nr1:q]->(new)-[nr2:q]->(n)
    set nr1.val = r1.value, nr2.val = r2.val
    delete r1, r2

如果 (b)-[:q]->(new) 存在,nr1 不会覆盖它,而是创建新关系,所以我最终得到两个 .

如果 r1 或 r2 尚不存在,我想创建 nr1 或 nr2 并且如果存在则对值求和,否则只需复制它们

4

1 回答 1

2

您可以在单独的 MERGE 子句中指定您的两个关系:

    match (new:state) where new.val = {new}
    match (b:state)-[r1:q]->(p:state)-[r2:q]->(n:state)
    where b.val = {blast} and p.val = {past} and n.val = {now}
    merge (b)-[nr1:q]->(new)
    merge (new)-[nr2:q]->(n)
    set nr1.val = r1.value, nr2.val = r2.val
    delete r1, r2
    
于 2020-09-01T17:59:52.223 回答