2017-05-29 6 views
0

ich diese folgende Art von Graphen, die ich diese Abfrage erhalten mit:Erhalten Beziehung zwischen den Knoten

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

Use Case:

1. Wen möchte ich finden In welcher Ebene befindet sich ein Knoten in Bezug auf den Knoten F? Beispiel:

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.... 

Ich habe versucht, dieses Problem zu lösen, indem eine variable i einleitet und das Ganze mit jeder Iteration erhöht (aber es nicht gearbeitet haben).

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. Gegeben zwei Knoten finden Beziehung zwischen dann

beispiels Find relation between F and X?

answer = 3 (as it is at level 3) Erwartet

Wie gehe ich vor, diese Anwendungsfälle zu lösen?

Hinweis: Grafische Antwort von Neo4j Server wird nicht unbedingt benötigt, Json Antwort wird auch in Ordnung sein.

Antwort

2

UC1 Verwenden Path und length(p) Funktion

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

Dadurch werden alle Pfade vom Wurzelknoten, und das Rück Paare zweiter finden, um letzte und letzte Knoten + Ebene Sie wollen.

Knoten (p) - Liste von Knoten auf dem Pfad P

[-2] - zweiten Knoten aus dem Ende der Liste

UC2:

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

Vielen Dank: shortestPath Funktion 'Anwendungsfall 1' gelöst, aber wie geht es mit 'Anwendungsfall 2' weiter? –

+0

@PrakashPandey hat Antwort auf uc2 hinzugefügt –

Verwandte Themen