2017-04-21 4 views
1

私はneo4jの1:多くの関係表示の問題を解決しようとしています。それは以下のように表示を返し Neo4jは1対多の関係で1つのノードのみを表示します

LOAD CSV WITH HEADERS FROM 'file:///FTTH_sample.csv' AS line 
CREATE(:ftthsample 
{child_id:line.child, 
desc:line.desc, 
type:line.type, 
parent_id:line.parent}); 

//Relations 
match (child:ftthsample),(parent:ftthsample) 
where child.child_id=parent.parent_id 
create (child)-[:test]->(parent) 

//Query: 
MATCH (child)-[childrel:test*]-(elem)-[parentrel:test*]->(parent) 
WHERE elem.desc='FDP' 
RETURN child,childrel,elem,parentrel 

child,desc,type,parent 
1,PGD,Exchange,0 
2,MSE 1,MSE,1 
3,MSE 2,MSE,1 
4,MSE 3,MSE,1 
5,MSE 4,MSE,1 
6,BRAS 1,BRAS,2 
6,BRAS 1,BRAS,3 
7,BRAS 2,BRAS,4 
7,BRAS 2,BRAS,5 
10,NPE 1,NPE,6 
11,NPE 2,NPE,7 
12,OLT,OLT,10 
12,OLT,OLT,11 
13,FDC,FDC,12 
14,FDP,FDP,13 
15,Cust 1,Customer,14 
16,Cust 2,Customer,14 
17,Cust 3,Customer,14 

以下のように私のデータセットがあります。

output

私は重複ノードが1として表示させたいです。 Neo4Jの初心者。専門家の誰もが助けてくれますか?

答えて

0

これは、グラフ作成クエリのエラーのようです。あなたは、同じノードを指定して、クエリで数行複数回を持っていますが、複数の親を持つ:

6,BRAS 1,BRAS,2 
6,BRAS 1,BRAS,3 

私は与えられた親を持つノードへの親の関係で、あなたが実際にこれは単一ノードになりたい推測しています2つの別々のノードではなく、

インポートクエリを調整しましょう。各行でCREATEを使用する代わりに、MERGEを使用し、child_idをプライマリキーと見なします(代わりにidを使用することをお勧めします。ノードは独自のIDを持つことができるため、それが親か子かの文脈を考慮する)。私たちは、代わりに、既存のノードにマッチングの(MERGEは、ノード作成が生じた場合にのみ、残りのプロパティに追加するMERGE後ON CREATE句を使用することができます。我々は唯一child_idごとに作成された一つのノードを持っていることを確認します

を。

ではなく、子供の再戦すること、我々は、我々が作成したばかりの子ノードを使用して、親との一致、および関係を作成することができます。

LOAD CSV WITH HEADERS FROM 'file:///FTTH_sample.csv' AS line 
MERGE(child:ftthsample {child_id:line.child}) 
ON CREATE SET 
child.desc = line.desc, 
child.type = line.type 

WITH child, line.parent as parentId 
MATCH (parent:ftthsample) 
WHERE parent.child_id = parentId 
MERGE (child)-[:test]->(parent) 

我々はプロパティとしてline.parentを追加していないに注意してください。それはです私たちはそれを使って関係を作り出し、関係腰がある、私たちはそれらを再び必要としません。

+0

ありがとうございます、 –

+0

あなたをバグしていただきありがとうございます。サンプルとは異なり、私の実際のデータセットは私のIDを持っているか、または結合カラムは文字列値です..そして、いくつかの子の値は親を持っているかもしれないし、持たないかもしれません。 これは私にエラーが表示される理由です。 "child_idのヌルプロパティ値を使用してノードをマージできません" ここで提供した解決方法を試しましたが、まだエラーをスローしています... http://stackoverflow.com/questions/40794877/how-to-include-null-values-using-neo4j-merge あなたは確認してください。もう一度バグして申し訳ありません。 –

+0

あなたはマージするためにいくつかのユニークな値を持つ必要があります。データがもともとリレーショナルデータベースから来たのであれば、通常はマージに使用する主キーIDがいくつかあります。一意のプライマリキーがなければ、これらのノードをマージすることはできません。これは、どのノードが一意であるかを判断する方法がないためです。私はあなたがエラーの周りにあなたを取得するかどうかはわかりませんが、child_idだけでなく、すべてのプロパティをマージすることができます。 – InverseFalcon

関連する問題