【问题标题】:Delete duplicate relationships between two nodes with Cypher where multiple relationships exist between two nodes使用 Cypher 删除两个节点之间的重复关系,其中两个节点之间存在多个关系
【发布时间】:2018-04-09 09:12:16
【问题描述】:

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

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

我希望:

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

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

【问题讨论】:

  • 您删除或保留关系的标准是什么?
  • 我要删除重复的关系(完全相同的关系)。
  • 例如:如果类型相同则关系相同如果类型和所有属性都相同?
  • 类型和所有属性都一样。

标签: neo4j cypher


【解决方案1】:

假设您的节点上有标签,这应该可以工作:

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,则存在多个具有相同类型的关系。我们将除第一个关系之外的所有关系都展开回行,然后将其删除。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多