2016-12-14 4 views
0

Meine Cypher Abfrage sieht wie folgt aus:Cypher Abfrage mit variabler Länge Pfad

match (n1:N1)-[r1:R1]->()<-[r2:R2*0..]-(n3)<-[r3:R3]-(n4) return * 

Wegen der 0 in der variablen Länge Beziehung (<-[r2:R2*0..]-), Ich habe diese Abfrage erwartet die gleiche wie die folgenden zu sein (n2 hinzugefügt):

match (n1:N1)-[r1:R1]->(n2)<-[r2:R2*0..]-(n3)<-[r3:R3]-(n4) return * 

, aber sie ergeben recht unterschiedliche Ergebnisse. Kann mir jemand helfen zu verstehen, warum das so ist? Ist es nur, dass die 0 nicht erlaubt ist? Danke.

Antwort

0

Ihre zweite Abfrage enthält eine Variable, die in der ersten Abfrage nicht vorhanden ist. Ihre Ergebnisse sind also natürlich anders, es wird eine zusätzliche Spalte geben.

Wenn wir das relevante Fragment Ihrer ersten Abfrage nehmen:

(n1:N1)-[r1:R1]->()<-[r2:R2*0..]-(n3) 

Das bedeutet, von dem ungebundenen Knoten in dem Muster ‚()‘, werden wir 0 oder mehr Beziehungen des Typs durchqueren: R2 und die Die resultierenden Knoten werden an die Variable n3 gebunden. Dieser ungebundene Knoten wird also immer in der n3-Spalte vorhanden sein, unabhängig davon, ob R2-Beziehungen vorhanden sind oder nicht.

Ihre zweite Abfrage wird sehr ähnliche Ergebnisse liefern, jede der Spalten sollte auf die gleichen Daten übereinstimmen, mit der Ausnahme, dass es eine zusätzliche Spalte, n2, gibt, die immer auf dem zuvor nicht gebundenen Knoten übereinstimmen wird. Derselbe Knoten wird auch weiterhin in der n3-Spalte angezeigt.

Wenn dies das Problem nicht löst, möchten Sie vielleicht besser erklären, was in den Ergebnissen für Sie keinen Sinn macht und was Ihrer Meinung nach die 0 in Ihrer Abfrage tut (0 ist definitiv in variabler Länge erlaubt) Beziehungen).

+0

Ich betrachte die Ergebnisse als Grafik (interaktive Visualisierung im Browser), nicht als Tabelle. In diesem Fall würde ich erwarten, dass das Ergebnis dasselbe ist. – Dennis

+0

Nein. R2 * 0. bedeutet eine Beziehung der Länge Null, d. H. Keine Beziehung. –

+0

@ ChristophMöbius Sie irren sich hier, das '..' bedeutet, dass dies eine Beziehung variabler Länge ist. 0 ist die untere Grenze, und da wir die obere Grenze weglassen, ist sie standardmäßig unendlich. Der Abschnitt über Pfade mit der Länge Null (https://neo4j.com/docs/developer-manual/current/cypher/clauses/match/#_zero_length_paths) in der Dokumentation erklärt, dass dieses Muster dem ursprünglichen Knoten selbst entspricht, oder eine beliebige Anzahl des angegebenen Beziehungstyps (Null mehr der Beziehung), um mit dem nächsten Teil des Pfads übereinzustimmen. – InverseFalcon

Verwandte Themen