2016-07-04 7 views
1

Ich habe eine baumartige Knotenstruktur in meiner Neo4j DB. Wenn ich einen bestimmten Knoten lösche, möchte ich alle untergeordneten Knoten und Beziehungen löschen, die zu diesem Knoten gehören. Betrachten Strukturknoten von unten Abfrage generiert,Wie löscht man alle untergeordneten Knoten und Beziehungen mit einer einzigen Abfrage in 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 

Wenn ich Eingangsknoten (nic: 44444v) sollte Knoten löschen (nic: 44444v), Knoten (nic: 55555v), Knoten (nic: 66666v ), Beziehung (r2), Beziehung (r3), Beziehung (r4) und Beziehung (R 5)

Antwort

3

Sie mehrere Tiefen Beziehungen und löschen Sie die Knoten verwenden können:

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

die 0.. Tiefe Definition bettet die n identifie r in den x Knoten und damit wird der Fall behandeln, wo die Person keine Kinder Knoten hat.

Alternative Syntax für oldier Neo4j Versionen:

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

Es braucht wohl nicht gesagt werden, aber nur für den Fall ... Versuchen Beziehung Etiketten in dieser Art von rekursive Operation zu verwenden. Andernfalls, wenn einer dieser Knoten eine Art von Beziehung hat, die aus dieser Baumstruktur zu einem anderen Knoten in Ihrer Datenbank ausbricht, werden Sie eine rekursive Löschung starten, die möglicherweise einen guten Teil auslöschen könnte sogar alle, deiner db. Selbst wenn es in Ihrem aktuellen Design keine Beziehungen gibt, die diesen Baum verlassen, kann eine zukünftige Datenbankänderung zusätzliche Beziehungen hinzufügen, die die Dinge später für ein Desaster einrichten. – InverseFalcon

+1

@Christophe, Funktioniert Ihre Abfrage in Neo4j 2.3.0-M02? Weil es mir Syntaxfehler gab. – Hasitha

+0

M02 ist ein Meilenstein-Release, nicht sicher und Sie sollten eine stabile Version als 2.3 GA wurde im Oktober 2015 veröffentlicht! Was sind deine Syntaxfehler? –