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

Python Neo4J查询创建新关系或替换现有关系,python,neo4j,cypher,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 DELET

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

当我使用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

如果要将特定类型的现有关系替换为新关系,请执行以下操作:

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
但是,如果只想在现有关系上设置属性,并在缺少属性时创建该属性,请执行以下操作:

match (a:user {id:'3'})
match (b:user {id:'5'})
merge (a)-[rel:REL_TYPE]->(b) //creates a new rel if it doesn't exist
set rel.percentage = 80

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

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

您想用新的关系类型替换现有关系吗?谢谢您的回答,但这里我不知道旧的关系类型标签。如果存在任何这样的标签,它们应该被替换。否则,您必须在第一个查询中首先提取标签,然后从中构造第二个查询,或者使用java、groovy等嵌入的Neo4j API