使用密码删除节点树?
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
我有一个任意深度的节点树,我想删除它。
我希望它能起作用:
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