在 Cypher 中,每个路径中的关系都是唯一的,因此除非您将查询分成两个单独的匹配项,r1
并且r2
永远不会绑定相同的关系。
MATCH (t0)-[r:RT]->(t1)-[:RT]->(t0)
DELETE r
此外,您的模式中声明的关系相对于 具有不同的方向(t0)
,因此它们也不能因此绑定相同的关系。如果您分解查询,您可以看到这一点。
MATCH (t0)-[r1:RT]->(t1), (t0)<-[r2:RT]-(t1)
附录
正如您在评论中指出的那样,这样的模式最终会删除这两种关系。这是偶然的——每个单独的匹配都会像上面那样运行,并且只有一个关系被删除。查询作为一个整体删除这两个关系的原因是模式是对称的,即t0
当且仅当节点也满足指定位置的模式时,节点才会满足指定位置的模式t1
,或者(半正式地)
(t0)-[:RT]->(t1)-[:RT]->(t0) iff (t1)-[:RT]->(t0)-[:RT]->(t1)
也许我应该这么说,r1
并且r2
永远不能同时绑定相同的关系,或者在相同的匹配或路径中。解决方案是打破对称性。我想象一个具有区分属性的本地查询
(t0 {name:"t0"})-[r:RT]->(t1)-[:RT]->(t0)
DELETE r
但是对于全局查询,如果您想一次完成所有操作,比较 id on t0
andt1
非常好。这正是您已经得出的答案。