Neo4j - 删除2个相关节点及其所有关系

时间:2015-09-17 08:33:44

标签: neo4j cypher

我试图删除2个相关节点的所有关系。

这是我一直试图做的查询:

match  (picture:Picture) where picture.id='101531146106623881437036830' 
optional match ()-[r]- picture-[:UPLOADED_TO]-(facebook:Facebook)-[rf]-()     
with r,rf,picture,facebook,picture.id as id     
delete r,rf,picture,facebook
return id

由于某种原因,似乎无法正确行事。

2 个答案:

答案 0 :(得分:2)

这个怎么样?

MATCH ()-[r]-(p:Picture {id:'101531146106623881437036830'})-[:UPLOADED_TO]-(fb:Facebook)-[rf]-()
DELETE r, p, fb, r

答案 1 :(得分:2)

您的查询无效,因为您无法删除图片,但关系仍然与之相关联。

让我们检查查询并解释错误

match  (picture:Picture) where picture.id='101531146106623881437036830' 

好的,你匹配图片节点,这里一切都很好

optional match ()-[r]- picture-[:UPLOADED_TO]-(facebook:Facebook)-[rf]-()

使用可选匹配是一种选择,但问题是您没有为UPLOADED_TO设置变量,因此查询可以看到这种关系,但没有引用。

with r,rf,picture,facebook,picture.id as id

在这里你推送你对删除部分的引用(实际上不需要它,只在这里使用别名)

delete r,rf,picture,facebook
return id

最后你删除了你想要删除的内容,但是在这里你得到一个错误“无法删除节点,因为它有关系”或类似的东西。这是因为UPLOADED_TO关系仍然存在。

如何解决?

只需添加对UPLOADED_TO关系的引用即可将其删除。

match  (picture:Picture) where picture.id='101531146106623881437036830' 
optional match ()-[r]- picture-[r2:UPLOADED_TO]-(facebook:Facebook)-[rf]-()     
with r2,r,rf,picture,facebook,picture.id as id     
delete r2,r,rf,picture,facebook
return id

MicTech的答案也应该有效,但我想澄清你的错误以避免再次这样做;)