2015-03-19 7 views
5

Ich bin auf der Suche nach einer Erklärung, wie dies funktioniert und warum die Anzahl der Knoten in einem Pfad nicht zurückgibt. Angenommen, ich passe zu einem Pfad p. Jetzt:Wie funktioniert count (nodes (p)) in Cypher, Neo4j

WITH p, count(nodes(p)) AS L1 RETURN L1 

liefert 1.

Wenn dies klar ist, wie zähle ich Pfade richtig Knoten?

Antwort

5

count() ist eine Aggregatfunktion. Wenn Sie eine Aggregatfunktion verwenden, werden Ergebniszeilen nach dem gruppiert, was in der RETURN-Klausel enthalten ist, und nicht eine Aggregatfunktion. In diesem Fall werden Ergebniszeilen nach gruppiert und der Rückgabewert wird gezählt (Knoten (p)).

nodes(p) kehrt ein Array von Knoten, so wird die Anzahl der count(nodes(p)) Arrays zurück und wird 1 immer gleich.

Um die Anzahl der Knoten im Pfad zurückzugeben, sollten Sie size(nodes(p)) verwenden.

Wenn Sie nur Interesse an der Länge eines Pfades ist und nicht besonders in den Knoten, die darin enthalten sind, würde ich empfehlen Sie length(p) zu verwenden. Dadurch wird die Länge in rels für einen bestimmten Pfad zurückgegeben, ohne die Knoten bearbeiten/zugreifen zu müssen.

+1

"Länge in Rels" ist eine wichtige Qualifikation - es stolperte mich ständig, dass die Länge in rels ist, es ist * nicht * die Anzahl der Knoten im Pfad, die immer eine mehr ist. – FrobberOfBits

+0

Das macht Sinn, danke für die Klärung. – wiktus239

+0

Sie sagen 'Ergebniszeilen werden nach dem gruppiert, was in der RETURN-Klausel enthalten ist', aber dann sagen Sie' In diesem Fall werden die Ergebniszeilen nach p gruppiert. Du widersprichst dir selbst – TheLogicGuy