2017-10-27 10 views
1

ノード間に複数の関係が存在するCypherを使用して2つのノード間の重複関係を削除します。与えられた例として 、:2つのノード間に複数の関係が存在するCypherを使用して2つのノード間の重複関係を削除します

a->r1->b 
a->r2->b 
a->r2->b 
a->r3->b 

は私が期待して:

a->r1->b 
a->r2->b 
a->r3->b 

は、私はすでに同様のquestionsに見えたが、彼らはあなたは、単に1を保つことができるように、2つのノード間のすべての関係が同じであると仮定し、私の場合は動作しません残りを削除します。

+0

関係を削除したり維持する基準は何ですか? –

+0

重複する関係(まったく同じもの)を削除します。 – media

+0

たとえば、タイプが同じ場合は関係は同じ*または*タイプとすべてのプロパティが同じ場合は関係は同じですか? –

答えて

1

あなたはノードのラベルを持っていると仮定すると、これは動作するはずです:

MATCH (a:A)-[r]->(b:B) 
WITH a, type(r) as type, collect(r) as rels, b 
WHERE size(rels) > 1 
UNWIND tail(rels) as rel 
DELETE rel 

を私たちは関係を収集し、任意のコレクションがより大きくなるので、もし、(同様の開始と終了ノードなど)の種類によってグループ化しています1の場合、同じタイプの複数の関係があります。最初の関係を除くすべての行を列に戻して削除します。

クエリに使用するラベルがない場合、クエリはグラフ全体になります。これは実行に時間がかかりすぎる可能性があり、削除するリレーションシップのセットが大きすぎると問題が発生する可能性があります一度にすべてを処理する。

関連する問題