如何在Neo4j中删除特定类型的所有关系

5

我刚接触Neo4j//Cypher,正在跟随教程学习。在操作电影数据库时,我尝试使用以下查询语句删除所有的"ACTED_IN"关系。

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

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

为什么它没有按照我的预期工作? 正确的做法是什么?

谢谢


你是否实际使用了小写的 "acted_in"?否则,在该查询的第一次运行中,它应该已经删除了所有内容。你使用的是哪个版本的Neo4j? - Michael Hunger
3个回答

9

我试过了,对我有效(使用的是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 ... 那么可能是图形可视化存在问题,无法正确更新自身。 - elabard
我确认...这是一个图形问题...图表需要一些查询(无论是什么)来删除所有的ACTED_IN关系。 - elabard

0

要删除所有与名称为“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将被视为不同的关系类型。


是的,我知道...我是指"...我仍然有一些ACTED_IN..."。我已经编辑了帖子。谢谢 - elabard
完全没有回答问题。 - gurel_kaynak
@gurel_kaynak请查看迈克尔·亨格在问题评论中的留言。当时存在一个问题,即关系是区分大小写的,这可能是导致某些关系未被删除的原因之一。但这是可视化端的问题(在我发布解决方案后稍后发布)。 - Sumeet Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接