2015-01-16 96 views
1

我有一個任意深度的節點樹,我想刪除。使用密碼刪除節點樹?

我預計這個工作:

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 

這是爲什麼?不應該先刪除這些關係嗎?我想它是遍歷所有找到的路徑並首先處理最短路徑。

有沒有人知道如何解決這個問題?

回答

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 
+0

完全正確!我的子樹的根連接在其他地方!謝謝你快速的回覆。 –