Neo4j 如何删除重复的 EDGE?

Neo4j How to drop a duplicated EDGE?

我正在学习 Cypher / Neo4j,使用 C#
我创建了这个 EDGE 3 次。

  client.Cypher
               .Match("(user1:Person)", "(user2:Person)")
               .Where((Person user1) => user1.name == "Tony")
               .AndWhere((Person user2) => user2.name == "Maria Esther")
               //.Create("(user1)-[:PAI]->(user2)")
               .Create("(user2)-[:FILHO {DataDeNascimento: '2006'}]->(user1)")
               .ExecuteWithoutResults();

如何删除另外 2 个 :FILHO(重复边)?

此查询将删除 Person 个节点之间的重复 :FILHO 关系:

MATCH (p1:Person)-[r:FILHO]->(p2:Person)
WITH p1, p2, COLLECT(r) as rels
FOREACH(r IN tail(rels) | DELETE r)

首先,它匹配所有 FILHO 关系和 Person 节点。 然后将每对 Person 节点的关系聚合到 rels 集合中。 然后遍历每个 rels 集合的尾部(所有关系,但第一个)并删除它们。

最好考虑一下如何避免创建重复边。考虑使用合并而不是创建。