关系的条件创造?

问题描述

我有一个移动关系的查询,但是如果存在现有的目标关系,则不替换它们,因此最终得到两个相似的连接。

    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,否则只需复制它们即可。

解决方法

您可以在单独的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