2016-07-10 12 views
3

Ich suche den längsten Pfad meines Graphen und ich möchte die Anzahl der verschiedenen Knoten dieses längsten Pfades zählen.neo4j Wie benutze ich count (distinct()) über die Knoten von Pfad

ich verwenden möchte count(distinct())

ich zwei Abfragen versucht.

Zuerst ist

match p=(primero)-[:ResponseTo*]-(segundo) 
with max(length(p)) as lengthPath 
match p1=(primero)-[:ResponseTo*]-(segundo) 
where length(p1) = lengthPath 
return nodes(p1) 

Das Abfrageergebnis ein Diagramm mit den Pfadknoten ist.

Aber wenn ich die Abfrage versucht

match p=(primero)-[:ResponseTo*]-(segundo) 
with max(length(p)) as lengthPath 
match p1=(primero)-[:ResponseTo*]-(segundo) 
where length(p1) = lengthPath 
return count(distinct(primero)) 

Das Ergebnis ist

count(distinct(primero)) 
2 

Wie kann ich count(distinct()) über den Knoten primero verwenden.

Knoten Primero hat ein Feld namens id.

Antwort

2

Sie sollten mindestens einen dieser Knoten binden, eine Richtung hinzufügen und auch eine Pfadgrenze berücksichtigen, sonst ist dies eine extrem teure Abfrage.

match p=(primero)-[:ResponseTo*..30]-(segundo) 
with p order by length(p) desc limit 1 
unwind nodes(p) as n 
return distinct n;