Neo4j 如果两个节点之间存在多个关系,则使用Cypher删除两个节点之间的重复关系

Neo4j 如果两个节点之间存在多个关系,则使用Cypher删除两个节点之间的重复关系,neo4j,cypher,Neo4j,Cypher,我想用Cypher删除两个节点之间存在多个关系的重复关系。 例如,给出了: a->r1->b a->r2->b a->r2->b a->r3->b 我期望: a->r1->b a->r2->b a->r3->b 我已经研究过类似的问题,但它们假设两个节点之间的所有关系都是相同的,因此您可以简单地保留一个节点并删除其余的节点,这在我的情况下不起作用。假设您的节点上有标签,这应该会起作用: MATCH (a:A)

我想用Cypher删除两个节点之间存在多个关系的重复关系。 例如,给出了:

a->r1->b
a->r2->b
a->r2->b
a->r3->b
我期望:

a->r1->b
a->r2->b
a->r3->b

我已经研究过类似的问题,但它们假设两个节点之间的所有关系都是相同的,因此您可以简单地保留一个节点并删除其余的节点,这在我的情况下不起作用。

假设您的节点上有标签,这应该会起作用:

MATCH (a:A)-[r]->(b:B)
WITH a, type(r) as type, collect(r) as rels, b
WHERE size(rels) > 1
UNWIND tail(rels) as rel
DELETE rel
我们正在收集关系并按类型(以及开始和结束节点)进行分组,因此如果任何集合大于1,则存在多个具有相同类型的关系。我们将除第一个关系之外的所有关系放回到行中,然后删除它们


如果您没有用于查询的标签,则查询将是图形范围的,这可能需要更长的时间才能执行,如果要删除的关系集太大而无法一次处理,则可能会遇到问题。

删除或保留关系的条件是什么?我想删除重复的关系(完全相同的)。例如:如果类型相同,或者如果类型和所有属性相同,则关系相同?类型和所有属性相同。