使用cypher删除节点树?

时间:2015-01-16 17:44:23

标签: neo4j cypher

我有一个任意深度的节点树,我想删除它。

我希望这可行:

MATCH (a)<-[rels*]-(t)
WHERE ID(a)=135
FOREACH(r in rels | DELETE r)
DELETE t,a

但它失败了:

javax.transaction.HeuristicRollbackException: Failed to commit transaction
    Transaction(32, owner:"qtp1200654940-73")
    [STATUS_NO_TRANSACTION,Resources=1], transaction rolled back --->
    Node record Node[137,used=false,rel=347,prop=-1,labels=Inline(0x0:
    []),light] still has relationships

这是为什么?不应该首先删除关系吗?我想它会迭代所有找到的路径并首先处理最短的路径。

有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

a节点可能具有传出关系,并且任何t节点也可能具有不在通向a的路径中的传入/传出关系。您的查询不会删除此类关系。

此查询应删除您的查询尝试删除的相同节点,但它也应删除需要删除的所有关系以允许:

MATCH ()<-[r1*0..1]-(a)<-[rels*]-(t)-[r2*0..1]-()
WHERE ID(a)=135
FOREACH (x IN r1 | DELETE x)
FOREACH (x IN r2 | DELETE x)
FOREACH (x IN rels | DELETE x)
DELETE a, t