1

使用下图:

(Boxer)-[:STARTS]->(Round)-[:CONTINUES]->(Round)-[:CONTINUES]->(Round)-[:CONTINUES]->(Round)

我想删除链表中的(Round)。

通过这样做,我得到了成功的结果:

MATCH (round:Round {uuid: $round.uuid})
MATCH (prevRound)-[:CONTINUES]->(round)-[:CONTINUES]->(nextRound)
DETACH DELETE round
MERGE (prevRound)-[:CONTINUES]->(round)

但这适用于除第一个回合之外的任何回合,因为它具有 STARTS 关系。所以我尝试了这个:

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)"
4

1 回答 1

1

您不能使用标识符在密码中动态创建关系。

在您的声明中,计划者认为您正在尝试将其prevRel用作您的标识符,MERGE但它已在MATCH上面使用。

幸运的是,有一个使用 APOC 的解决方案。程序可apoc.merge.relationship用于创建与删除回合时删除的关系类型相同的新关系类型。

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
于 2020-02-08T00:44:35.347 回答