Search code examples
neo4jcypherpath-finding

how to get the last node in path in neo4j?


In this cypher query,the longest path/paths between nodes which have relationship with STATUS="on" property with each other,will be returned,but I want to get also the last node of the path/paths.

query:

START n=node(*)
MATCH p=n-[rels:INCLUDE*]->m 
WHERE ALL (rel IN rels 
  WHERE rel.status='on') 
WITH COLLECT(p) AS paths, MAX(length(p)) AS maxLength 
RETURN FILTER(path IN paths 
  WHERE length(path)= maxLength) AS longestPaths

how should I add it to the query? thanks.


Solution

  • This would give two arrays. The first array is the last item in each path, the second is each path:

    START n=node(*)
    MATCH p=n-[rels:INCLUDE*]->m 
    WHERE ALL (rel IN rels 
      WHERE rel.status='on') 
    WITH COLLECT(p) AS paths, MAX(length(p)) AS maxLength 
    WITH FILTER(path IN paths WHERE length(path)= maxLength) AS longestPaths
    RETURN EXTRACT(path IN longestPaths | LAST(path)) as last, longestPaths