问题描述
我有一个移动关系的查询,但是如果存在现有的目标关系,则不替换它们,因此最终得到两个相似的连接。
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