如何在Neo4j中使用单个查询删除所有子节点和关系。?

时间:2016-07-04 08:12:24

标签: neo4j cypher

我的Neo4j数据库中有一个类似节点结构的树。当我删除特定节点时,我想删除与该节点相关的所有子节点和关系。 考虑由以下查询生成的节点结构

merge (p1:Person{nic:'22222v'})-[r1:R1]->(p2:Person{nic:'33333v'}) 
merge(p1)-[r2:R2]->(p3:Person{nic:'44444v'}) 
merge(p2)-[r3:R3]->(p3) 
merge (p3)-[r4:R4]->(p4:Person{nic:'55555v'}) 
merge(p4)-[r5:R5]->(p5:Person{nic:'66666v'}) 
return r1,r2,r3,r4,r5

如果我输入节点(nic:44444v),它应该删除节点(nic:44444v),节点(nic:55555v),节点(nic:66666v) ),关系(r2),关系(r3),关系(r4)和关系(r5)

1 个答案:

答案 0 :(得分:4)

您可以使用多个深度关系并删除节点:

MATCH (n:Person {nic:'44444v'})-[*0..]->(x)
DETACH DELETE x

0..深度定义会在n节点中嵌入x标识符,从而处理此人没有子节点的情况。

oldier neo4j版本的替代语法:

MATCH (n:Person {nic:'44444v'})-[*0..]->(x) 
OPTIONAL MATCH (x)-[r]-() 
DELETE r, x