2017-03-15 23 views
1

重複したノードがあり、そのすべてにラベルタグが付いています。私は重複して意味することは、私は、同じ名前のプロパティ、例えば、2つのノードを持っているということです。Neo4j Cypher:重複したノードをマージする

すべてのエフェクトでは、これら3つのノードは、それらのそれぞれが持っている唯一のこと、同じになるよう _idフィールドは使用されなくなりました
{ name: writing, _id: 57ec2289a90f9a2deece7e6d}, 
{ name: writing, _id: 57db1da737f2564f1d5fc5a1}, 
{ name: writing } 

異なる関係。

私は何をしたいことは次のとおりです。

  1. が最初の1

  2. に重複ノードからのすべての関係を削除し、すべての重複ノード(チェック)

    MATCH (n:Tag) 
    WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count 
    WHERE count > 1 
    RETURN name, nodelist, count 
    
  3. コピーを探しますすべての重複ノード

これをサイファークエリで実現できますか?または、ある種のプログラミング言語でスクリプトを作成する必要がありますか? (これは私が避けようとしているものです)

答えて

5

APOCプロシージャにはいくつか役立つgraph refactoring proceduresがあります。私はapoc.refactor.mergeNodes()がすべきことだと思う。

他のノードからリストの最初のノードにすべてのリレーションシップを転送するだけでなく、他のノードのラベルとプロパティも最初のノードに適用することに注意してください。それがあなたがやりたいことではない場合は、他のノードからの着信および発信の関係を収集し、代わりにapoc.refactor.to()apoc.refactor.from()を使用する必要があります。

ここでノードをマージするためのクエリです:

MATCH (n:Tag) 
WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count 
WHERE count > 1 
CALL apoc.refactor.mergeNodes(nodelist) YIELD node 
RETURN node 
+0

うわー、私はこのAPOCプラグインについてはしませんでした。非常に便利、ありがとう! –

関連する問題