2017-01-24 5 views
2

Wie kann ich alle Pfade zwischen zwei Vertices mit einer Tiefe von n in Arangodb 3.1 bekommen? Die einzige Möglichkeit, die ich in der AQL-Dokumentation fand, war der kürzeste Weg. Aber ich möchte alle Wege, nicht nur den kürzesten Weg.Finden Sie alle Pfade zwischen zwei Vertices

Danke für Ihre Hilfe!

+0

http://stackoverflow.com/questions/29677086/arangodb-how-to-get-all-the-possible-paths-between-2-vertices – kyle

+0

Danke @ kyle Aber das funktioniert nicht für Arangodb 3.1 – chhl

Antwort

4

Um alle Pfade zu bekommen genau Länge n zwischen zu Eckpunkten mit bekannten _id Werten Sie die folgende AQL-Anweisung verwenden:

FOR target, unused, path IN @depth ANY @source edgeCollection 
    FILTER target._id == @target 
    RETURN path 

Lassen Sie mich kurz die Teile erklären:

  • FOR target, unused, path => definiert Rückgabewerte: target = Vertex, nach dem Sie suchen, unused = letzte Kante, die darauf zeigt, path = der vollständige Pfad im Format: {edges: [edge1, edge2, ..], vertices: [vertex1, vertex2, ...]}
  • IN @depth => Definiere die exakte Tiefe n es werden keine kürzeren und keine weiteren Pfade zurückgegeben. Kann auch @[email protected] sein, dann werden alle Pfade mit der Länge min bis max zurückgegeben.
  • ANY => Suchrichtung ist, wird diese Richtung der Kanten ignorieren, kann auch
  • edgeCollection => Name der Randerhebung, auch GRAPH "graphName"
  • INBOUND oder OUTBOUND
  • @source => der Zieleckenkennung sein kann
  • FILTER target._id == @target => Hier bestätigen wir, dass wir den richtigen Eckpunkt finden.
  • RETURN path => Nun den Pfad zurückzukehren;)
+0

Danke @mchacki! Das ist wonach gesucht wird! Ich dachte, das erste Parameterziel enthält alle Ecken des Ergebnisses. – chhl

Verwandte Themen