how do I delete duplicate relationships between two nodes with cypher?
To do this for two known nodes:
start n=node(1), m=node(2) match (n)-[r]->(m)
with n,m,type(r) as t, tail(collect(r)) as coll
foreach(x in coll | delete x)
To do this globally for all relationships (be warned this operation might be very expensive depending on the size of your graph):
start r=relationship(*)
match (s)-[r]->(e)
with s,e,type(r) as typ, tail(collect(r)) as coll
foreach(x in coll | delete x)
With Neo4J 4.x and to globally remove duplicate relationships, you'll want to use the following instead. The syntax has changed slightly and the start
prefix mentioned in the other reply no longer works.
match ()-[r]->()
match (s)-[r]->(e)
with s,e,type(r) as typ, tail(collect(r)) as coll
foreach(x in coll | delete x)