Sagen wir, ich habe eine Frage wie:Orientdb: Holen Sie sich alle durchlaufen Elemente eines Weges
select out("E1").out("E2").out("E3") from V1
wo E1, E2, E3 sind Klassen „E“ und V1 erstreckt, ist eine Klasse „V“ erstreckt.
Ich möchte alle Elemente erhalten, die bei der Ausführung der Abfrage durchlaufen wurden (d. H. Nicht nur die Endergebnisse). Betrachten Sie es als eine Art der Verfolgung der Elemente, die bei der Ausführung der Abfrage beteiligt waren.
Ich habe versucht, den folgenden Fahrbefehl:
traverse in from (traverse outE("E3") from (traverse in from (traverse outE("E2") from (traverse in from (traverse outE("E1") from V1)))))
, die nahe ist, was ich brauche, aber es ist nicht das gleiche. Das Problem mit diesem Befehl ist, dass, wenn einige Vertices der ursprünglichen Menge von "V1" Kanten der Klasse "E2" oder "E3" enthalten, sie auch durchlaufen werden, obwohl ich nicht möchte, dass sie durchlaufen werden (da die Select-Abfrage wird die "E2" -Kanten der Knoten durchlaufen, die nur durch das Überfahren der "E1" -Kanten zurückgegeben wurden. Das heißt, ich möchte, dass der TRAVERSE-Befehl nur die Ergebnisse des vorherigen Schritts durchläuft und nicht alle Ergebnisse bis zu diesem Punkt
Gibt es einen Weg, dies zu erreichen?
vollständige Syntax hier http://orientdb.com/docs/2.2.x/SQL-Match.html –
Danke Luigi. Das ist, was ich gesucht habe. Ich musste nur Ihre Antwort anpassen, um die Kanten zwischen den Vertices wie folgt einzuschließen: 'MATCH {Klasse: V1, wie: a} .outE (" E1 ") {wie: b} .inV() {wie : c} .outE ("E2") {wie: d} .inV() {wie: e} .outE ("E3") {wie: f} .inV() {wie: g} RETURN $ patterns –