Database Reference
In-Depth Information
Wenn uns Alice nicht interessiert, können wir dem
except()
-Filter eine Liste
der Knoten übergeben, die wir nicht wünschen.
alice.bothE('friends').bothV.except([alice]).name
==> Patty
Das Gegenstück zu
except()
ist
retain()
, das (wie Sie sich wohl denken
können) nur passende Knoten durchgeht.
Eine andere Option besteht darin, die letzte Vertex stattdessen mit einem
Codeblock herauszufiltern, der prüft, dass der aktuelle Schritt nicht der
alice
-
Vertex entspricht.
alice.bothE('friends').bothV.filter{!it.equals(alice)}.name
Und wenn wir nun alle Freunde von Alices Freunden suchen? Dann können
wir die Schritte einfach wie folgt wiederholen:
alice.bothE('friends').bothV.except([alice]).
bothE('friends').bothV.except([alice])
Auf die gleiche Weise könnten wir die Freunde der Freunde von Alices Freun-
den aufspüren, indem wir weitere
bothE
/
bothV
/
except
-Aufrufe hinzufügen.
Aber dann muss man sehr viel eintippen und man kann das bei einer varia-
blen Anzahl von Schritten nicht auf diese Weise machen. Hier hilft uns die
loop
-Methode. Sie wiederholt eine Reihe von Schritten, solange die gegebene
Closure wahr ist.
Der folgende Code wiederholt die drei vorangegangenen Schritte, indem er
die Punkte vom loop-Aufruf zurückzählt.
except
ist also der erste,
bothV
der
zweite und
bothE
der dritte Schritt.
alice.bothE('friends').bothV.except([alice]).loop(3){
it.loops >= 2
}.name
Nachdem die Schritte durchlaufen wurden, ruft
loop
die angegebene Closure
auf - d. h. den Code zwischen den geschweiften Klammern
{...}
In unserem
Beispiel hält die
it.loops
-Property nach, wie oft die aktuelle Schleife aus-
geführt wurde. Wir prüfen, ob dieser Wert größer oder gleich zwei ist, d. h.,
die Schleife wird zweimal ausgeführt und dann beendet. Tatsächlich verhält
sich die Closure wie die Klausel einer
while
-Schleife bei einer typischen Pro-
grammiersprache.