使用密码删除节点树?

Deleting a tree of nodes, using 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

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

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

a 节点可能有传出关系,任何 t 节点也可能有 incoming/outgoing 关系,但不在通向 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