2017-01-05 2 views
1

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?

Antwort

1

sollten Sie MATCH anstatt:

MATCH 
{class:V1, as:a} -E1-> {as:b} -E2-> {as:c} -E3-> {as:d} 
RETURN $patterns 

Dadurch werden alle Satz-IDs zurück, die dem Muster entsprechen, zB.

| a | b | c | d | 
| #12:0 | #12:1 | #12:2 | #12:4 | 
| #12:3 | #12:5 | #12:7 | #12:8 | 

Wenn Sie sie erweitert benötigen, ersetzen Sie einfach return $patterns mit return $elements, zum Beispiel.

MATCH 
{class:V1, as:a} -E1-> {as:b} -E2-> {as:c} -E3-> {as:d} 
RETURN $elements 
+0

vollständige Syntax hier http://orientdb.com/docs/2.2.x/SQL-Match.html –

+0

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 –

Verwandte Themen