Neo4J查询创建新关系或替换现有关系

时间:2015-06-26 04:39:46

标签: python neo4j cypher

我有一个场景,我必须为新关系创建节点,或者如果节点存在且存在关系,我必须用新的关系替换现有关系。两个节点之间只存在一种关系。

当我使用GDB.query从Python客户端调用时,下面的命令似乎不起作用:

match (a:user)-[r]->(b:user)
where a.id='3' and b.id='5' 
merge (a)-[r2:test]->(b)
SET r2 = r SET r2.percentage = 80
WITH r
DELETE r
return r

MATCH (a:user),(b:user)
WHERE a.id='3' AND b.id='5'
MERGE (a)-[r:test]->(b) 
RETURN r

2 个答案:

答案 0 :(得分:3)

如果要将特定类型的现有关系替换为新关系:

FEATURE

但是,如果您只想在现有关系上设置属性并在缺少时创建它:

match (a:user {id:'3'})
match (b:user {id:'5'})
merge (a)-[newRel:NEW_TYPE]->(b) //create the new rel if missing 
set newRel.percentage = 80
match (a)-[oldRel:OLD_TYPE]->(b) //match the old rel
delete oldRel //and delete it

答案 1 :(得分:0)

最后,得到了正确的查询。首先我们执行匹配,如果它不起作用,我们执行第二个查询,它执行创建,如果它已经存在,它就不会做任何事情。

match (a:user)-[r]->(b:user) 
where a.id=3 and b.id=5 
merge (a)-[r2:test4]->(b) 
set r2.percentage = 50 
delete r 
return a,b, r2

MERGE (a:user {id:3})-[r:test]->(b:user {id:5}) 
ON CREATE 
SET r.percentage = 55
ON MATCH
SET r.percentage = 55