2015-03-19 9 views
5

Sto cercando una spiegazione di come funziona e perché non restituisce il numero di nodi in un percorso. Supponiamo che io abbia trovato un percorso p. Ora:Come funziona count (nodes (p)) in Cypher, Neo4j

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

rendimenti 1.

Quando questo è chiaro, come faccio io conto i percorsi nodi correttamente?

risposta

5

count() è una funzione di aggregazione . Quando si utilizza una funzione di aggregazione, le righe dei risultati verranno raggruppate in base a qualsiasi elemento incluso nella clausola RETURN e non una funzione di aggregazione. In questo caso, le righe dei risultati saranno raggruppate per p e il valore restituito sarà conteggiato (nodi (p)).

nodes(p) rendimenti una matrice di nodi, in modo count(nodes(p)) restituirà il conteggio degli array e sarà sempre uguale 1.

Per restituire la quantità di nodi nel percorso è necessario utilizzare size(nodes(p)).

Se siete solo interessati alla lunghezza di un percorso e non particolarmente nei nodi che sono inclusi in esso, vorrei vi incoraggio a usare length(p). Ciò restituirà la lunghezza in rel per un dato percorso, senza dover manipolare/accedere ai nodi.

+1

"length in rels" è una qualifica importante: mi faceva inciampare costantemente che la lunghezza è lunga in rel, non è * il numero di nodi nel percorso, che è sempre uno di più. – FrobberOfBits

+0

Questo ha senso, grazie per chiarire questo. – wiktus239

+0

Si dice che "le righe dei risultati saranno raggruppate in base a qualunque cosa è incluso nella clausola RETURN", ma poi si dirà "In questo caso, le righe dei risultati saranno raggruppate per p". Ti contraddici – TheLogicGuy

Problemi correlati