MATCH (duplicateNode:Movie{name:"Oceans Eleven"})-[r]->(destNode)
WITH destNode , r
OPTIONAL MATCH (trueNode:Movie{name:"Ocean's Eleven"})-[r1]->(destNode)
WHERE r1<>r
WITH r1,r,destNode,trueNode
WITH r,trueNode,destNode, CASE r1 WHEN NULL THEN [] ELSE [1] END AS lst
UNWIND lst as x
CALL apoc.create.relationship(trueNode,type(r),properties(r), destNode)
YIELD from,to
RETURN from,to LIMIT 100
вышеупомянутый запрос создаст все внешние отношения.
MATCH (duplicateNode:Movie{name:"Oceans Eleven"})<-[r]-(destNode)
WITH destNode , r
OPTIONAL MATCH (trueNode:Movie{name:"Ocean's Eleven"})<-[r1]-(destNode)
WHERE r1<>r
WITH r1,r,destNode,trueNode
WITH r,trueNode,destNode, CASE r1 WHEN NULL THEN [1] ELSE [] END AS lst
UNWIND lst as x
CALL apoc.create.relationship(destNode,type(r),properties(r), trueNode)
YIELD from,to
RETURN from,to LIMIT 100
это будет делать внутренние отношения .. после выполнения двух выше для каждой ошибки. Вы можете сделать следующее, чтобы удалить все неправильные узлы
MATCH (movie:Movie) WHERE movie.name IN ["Oceans Eleven","..",".."]
DETACH DELETE movie
, если дублирующие отношения узлов полностью отличаются от отношений исходного узла, тогда вы можете игнорировать следующую часть в приведенных выше сценариях,
OPTIONAL MATCH (trueNode:Movie{name:"Ocean's Eleven"})-[r1]->(destNode)
WHERE r1<>r
WITH r1,r,destNode,trueNode
WITH r,trueNode,destNode, CASE r1 WHEN NULL THEN [] ELSE [1] END AS lst
UNWIND lst as x
и просто сопоставьте trueNode
MATCH (trueNode:Movie{name:"Ocean's Eleven"})