Rückgabe nur einfache Pfade in Neo4j Cypher query
Angesichts einer Abfrage wie der folgenden:
START n = node(123)
MATCH p = n-[r:LIKES*..3]->x
RETURN p;
Ergebnis Wege, die ich mit der obigen Abfrage enthalten Zyklen.
Wie kann ich wieder nur einfache Pfade?
Angesichts dieser Beispiel:
- Wie kann ich vermeiden, dass die Pfade mit wiederholten Knoten wie: [Neo, Morpheus, Trinity, Morpheus, Neo]
- Beachten Sie, dass der Pfad der Länge 3 ist ein query-parameter thet ändern können
- Haben Sie ein Beispiel für die Verwendung console.neo4j.org/usage.html?
- gerade Hinzugefügt!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angabe der Eindeutigkeit der Pfade ist ein feature geplant von cypher.
So jetzt müssen wir feststellen, dass kein Knoten ist ein Duplikat in den Weg.
Es ist ein
ALL
Prädikat, das muß wahr halten für alle Elemente einer Sammlung (was ein Pfad ist).Und mit
filter
können Sie extrahieren Sie die Elemente einer Sammlung für das eine bestimmte Bedingung gilt.Also, was ich Tat, war:
n
n
length
dieser SammlungALL
, dass es EINE für jedenn
finden Sie unter: http://console.neo4j.org/r/dpalbl
filter(m in nodes(path) WHERE m=n))
create (n:ent {id:'a'})-[:rel]->(:ent {id:'b'})-[:rel]->(o:ent {id:'c'})-[:rel]->(p:ent {id:'d'})-[:rel]->(:ent {id:'e'})-[:rel]->(n),(p)-[:rel]->(o)
die AbfrageMATCH path=(ent{id:'a'})-[:rel*0..]->(ent) WHERE ALL(n in nodes(path) WHERE 1=length(filter(m in nodes(path)WHERE m=n))) RETURN path
gibtkey not found: UNNAMED25
Fehler!!!mein workaround für dieses:
siehe Beispiel in der Konsole
In 2.3.0, verwenden Sie die folgende: