2016-07-04 6 views
1

Neo4j DBにノード構造のようなツリーがあります。特定のノードを削除すると、そのノードに関連するすべての子ノードと関係を削除します。 I入力ノード(NIC:44444v)場合、クエリ以下によって生成されたノード構造、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 

検討し、それはノードを削除する必要があり(NIC:44444v)、ノード(NIC:55555v)、ノード(NIC:66666v )関係(R2)、あなたが複数の深さとの関係を使用してノードを削除することができます関係(R3)、関係(R4)との関係(R5)

答えて

3

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

0..深さの定義はn同定さを埋め込みますrをノードのxに入れて、人が子ノードを持たないケースを処理します。 oldierのNeo4jのバージョンの

代替構文:

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

それはおそらく言われる必要はありませんが、念のために...再帰的なこの種の操作に関係ラベルを使用してみてください。それ以外の場合、それらのノードのいずれかが、そのツリー構造からデータベース内の他のノードに何らかの関係を壊してしまった場合、良い部分を消す可能性のある再帰的な削除を開始します。すべてのあなたのdbの。現在の設計でそのツリーを逃れる関係がなくても、将来のDB変更により、後で災害のために物事を設定する追加の関係が追加される可能性があります。 – InverseFalcon

+1

@Christophe、あなたのクエリはNeo4j 2.3.0-M02で動作しますか?それは私に構文エラーを与えたので。 – Hasitha

+0

M02はマイルストーンリリースであり、わからないので、2015年10月に2.3 GAがリリースされたので安定版を使用してください!構文エラーは何ですか? –

関連する問題