2017-05-29 4 views
0

との関係を取得します。私はこのクエリを使用して取得し、グラフのこの次のタイプ持っているノード

MATCH (p:Person)-[:REPORTS_TO *]->(c:Person) WHERE p.name="F" 
WITH COLLECT (c) + p AS all 
UNWIND all as p MATCH (p)-[:REPORTS_TO]-(c) 
RETURN p,c; 

enter image description here

ユースケース:

1.私が見つけたいですノードのレベルはノードFに対してどのレベルですか? 例:

Node `D`, `E` are direct child of `F`, hence they are at level 1 

    Node `A,B,C` are childs of `D` (which is child of `F`) hence level 2 

    Node `X` is child of `A' (which is at level 2), hence level 3 

and so onnnnn.... 

Iは、(それは働いていなかった)変数iを導入することによってこの問題を解決し、各反復でそれを増加しようとしました。

MATCH (p:Person)-[:REPORTS_TO *]->(c:Person) WHERE p.name="F" 
WITH COLLECT (c) + p AS all ,i:int=0 
UNWIND all as p MATCH (p)-[:REPORTS_TO]->(c) 
RETURN p,c, i=i+1; 

2.与えられた2つのノードが関係を見つけ、その後

例えばanswer = 3 (as it is at level 3)

どのように私はこれらのユースケースを解決するために進むべきを期待Find relation between F and X?

注意:Neo4jサーバーからのグラフィカルな応答は必ずしも必要ではありませんが、Jsonの応答もうまくいきます。

答えて

2

UC1使用Pathlength(p)機能

MATCH p=(root:Person)-[:REPORTS_TO *]->(child:Person) 
WHERE root.name="F" 
RETURN nodes(p)[-2], nodes(p)[-1],length(p) 

これは+あなたが望むレベルのルートノードからのすべてのパスを見つけ、そして最後に第二のペアを返し、最後のノードます。

ノード(P) - パスP上のノードのリスト

[-2] -

UC2は、リストの最後から二番目のノード:

MATCH (p1:Person),(p2:Person) 
WHERE p1.name = '..' AND p2.name = '...' 
MATCH p=shortestPath((p2)-[:REPORTS_TO*]->(p2)) 
RETURN length(p) 
+0

感謝:shortestPath関数を使用'use-case 1'を解決しましたが、' use-case 2'を進める方法 –

+0

@PrakashPandeyはuc2に答えを追加しました –

関連する問題