【问题标题】:how do i delete all relationship of a specific type in Neo4j我如何删除 Neo4j 中特定类型的所有关系
【发布时间】:2014-03-11 10:11:04
【问题描述】:

我是 Neo4j 的新手 // Cypher,我正在学习教程。 在使用电影数据库时,我尝试使用以下查询删除所有“ACTED_IN”关系

match (:Person)-[r:ACTED_IN]->(:Movie)
DELETE r;

但是我发现我在节点之间仍然有一些“ACTED_IN”关系,我必须多次重新运行之前的查询才能完全删除这些关系。

为什么它没有像我预期的那样工作? 这样做的正确方法是什么?

谢谢

【问题讨论】:

  • 你真的使用了小写“acted_in”吗?否则它应该在该查询的第一次运行中删除所有内容。你用的是哪个 Neo4j 版本?

标签: neo4j cypher


【解决方案1】:

刚刚试过,对我有用(使用 Neo4j 2.0.1 和 2.1.0-M01)

match (:Person)-[:ACTED_IN]->(:Movie) return count(*);

-> count(*)
   172

match (:Person)-[r:ACTED_IN]->(:Movie) delete r;

-> Deleted 172 relationships, returned 0 rows in 172 ms

match (:Person)-[:ACTED_IN]->(:Movie) return count(*);

-> count(*)
   0

【讨论】:

  • 我只是尝试使用 count(*)...它正确返回 0 ...那么图形可视化可能有问题,无法正确更新。
  • 我确认...这是一个图形问题...图形需要一些查询(无论它们是什么)来删除所有 ACTED_IN 关系
【解决方案2】:

删除与名称为“vishal1@myemail.com”的节点关联的所有“关注”关系:

MATCH (n { name:'vishal1@myemail.com' })-[r:follows]->() DELETE r

为我工作:)

此外,您还可以指定标签(在我的情况下为“用户”)以区分具有相同名称的节点

MATCH (n:User { name:'vishal1@myemail.com' })-[r:follows]->() DELETE r

【讨论】:

    【解决方案3】:

    Neo4j 关系类型区分大小写。所以ACTED_INacted_in 将充当不同的relationshipTypes

    【讨论】:

    • 是的,我知道...我的意思是“...我还有一些 ACTED_IN...”。我已经编辑了帖子。谢谢
    • 根本没有回答这个问题。
    • @gurel_kaynak 检查迈克尔饥饿对这个问题的评论。当时的问题是关系区分大小写,这可能是导致某些关系没有被删除的问题之一。但这是可视化端的一个问题(在我发布我的解决方案后才发布)
    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 2012-12-24
    • 2021-09-18
    • 2016-05-25
    • 1970-01-01
    • 2015-04-29
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多