Neo4j 带merge的cypher中的重用关系

Neo4j 带merge的cypher中的重用关系,neo4j,cypher,relationship,Neo4j,Cypher,Relationship,使用以下图表: (Boxer)-[:STARTS]->(Round)-[:CONTINUES]->(Round)-[:CONTINUES]->(Round)-[:CONTINUES]->(Round) 我想删除链接列表中的一个(圆) 通过这样做,我获得了一个成功的结果: MATCH (round:Round {uuid: $round.uuid}) MATCH (prevRound)-[:CONTINUES]->(round)-[:CONTINUES]->(

使用以下图表:

(Boxer)-[:STARTS]->(Round)-[:CONTINUES]->(Round)-[:CONTINUES]->(Round)-[:CONTINUES]->(Round)
我想删除链接列表中的一个(圆)

通过这样做,我获得了一个成功的结果:

MATCH (round:Round {uuid: $round.uuid})
MATCH (prevRound)-[:CONTINUES]->(round)-[:CONTINUES]->(nextRound)
DETACH DELETE round
MERGE (prevRound)-[:CONTINUES]->(round)
但这将适用于除第一轮之外的任何一轮,因为这会启动一段关系。所以我试了一下:

MATCH (round:Round {uuid: $round.uuid})
MATCH (prevRound)-[prevRel:CONTINUES|STARTS]->(round)-[nextRel:CONTINUES]->(nextRound)
DETACH DELETE round
MERGE (prevRound)-[prevRel]->(round)
但我得到了这个错误:

Neo4jError: Variable `prevRel` already declared 
MERGE (prevRound)-[prevRel]->(nextRound)"

不能使用标识符在cypher中动态创建关系

在您的声明中,计划者认为您试图使用
prevRel
作为
MERGE
中的标识符,但它已经在上面的
匹配中使用

幸运的是,使用APOC可以解决这个问题。
apoc.merge.relationship
procude可用于创建新的关系类型,该关系类型与您在删除回合时删除的关系类型相同

MATCH (round:Round {uuid: $round.uuid})
MATCH (prevRound)-[prevRel:CONTINUES|STARTS]->(round)-[nextRel:CONTINUES]->(nextRound)
DETACH DELETE round
WITH prevRound, prevRel, nextRound
CALL apoc.merge.relationship(prevRound, type(prevRel), {}, {}, nextRound) YIELD rel
RETURN prevRound, rel, nextRound

请注意,您还试图重用
round
变量…这是您刚刚删除的节点!我想您的意思是对末尾的节点使用
nextrond
。可能需要对另一端的节点使用
nextrond
,因为刚刚删除了
round
。我收到一个错误:DELETE和call之间需要WITH。对此,我深表歉意。我对细节缺乏关注。我更新了它。谢谢,它仍然不起作用,我花了一段时间才意识到我必须增加收益率和回报率。我发现这条解释文档中缺少apoc.merge.relationship的线索:不管怎样,请在末尾添加“YIELD rel RETURN”来更新您的答案。收到-很高兴您对其进行了排序