Gremlin
| Back to OverviewBei dem Namen brauch ich keine Witze mehr
Grundlagen
wie immer. Aber noch weitere Eigenschaften: Knoten und Kanten bekommen ID, Label, Records (Key-Value Paare). Kanten sind gerichtet
Traversals
Basics: Alle Knoten ausgegeben: g.V().toList()
Alle Kanten ausgegeben: g.E().toList()
Steps:
- sideEffekt Steps:
- addV(label): fügt einen Knoten mit Label hinzu
- property(key, value): fügt eine Property hinzu
- addE(label).from(V()).property(key, value): fügt eine Kante mit Label und property hinzu
- drop: löscht
g.V(2).fold().unfold().drop().iterate()
löscht knoten mit id 2
- filter Steps:
V, E
: filtert nach Knoten oder KantenhasLabel(label)
|has("name", label)
: filtert nach Label oder Propertyand_
|or_
|not_
: logische Operatoreng.V().and_(hasLabel("person"), has("name", "Söder"))
range_(start, end) | limit(n) | tail(n)
: limitiert die Anzahl der Ergebnisse | limitiert die Anzahl der ersten n | letzten n
- flatMap Steps:
out(label) | in(label) | both(label)
: gibt alle Knoten aus, die von Knoten ausgehen über Kante mit label (optional) | eingehen | ausgehen und eingehenoutE(label) | inE(label) | bothE(label)
: gibt alle Kanten aus, die von Knoten ausgehen mit label(optional) | eingehen | ausgehen und eingehenoutV() | inV() | bothV()
: gibt alle Knoten aus, die von der Kante ausgehen| eingehen | ausgehen und eingehen
- map Steps:
id_, label, values(key)
: gibt die id, label, values von Knoten oder Kanten auselementMap(), valueMap()
: Gibt liste von key-value Paaren auscount()
: gibt die Anzahl der Ergebnisse ausmin_() | max_() | mean() | sum_()
: gibt das Minimum | Maximum | Durchschnitt | Summe ausgroup, by(label)
: gruppiert die Ergebnisse nach labelfold | unfold
: sammelt die Ergebnisse in einer Liste aber ohne Traversal zu beenden | entpackt die Listeorder()
: sortiert die Ergebnisse aufsteigend lässt sich mitby(label*, desc)
absteigend sortierenpath()
: gibt den Pfad des Traversals aus.g.V().out().out().values("name").path().toList() => [path[v[1], v[3], "Markus"], path[v[1], v[4], "Söder"]]
select | as_(label)
: wählt die Ergebnisse aus.g.V().as_("a").out().as_("b").select("a", "b").toList() => [{a: v[1], b:v[3]}, { a: v[1], b: v[4]}]
- branch Steps:
choose(Bedingung, trueTraversal, falseTraversal)
: führt je nachdem obBedingung
true oder false ist den trueTraversal oder falseTraversal ausunion
: führt mehrere Traversals aus / zusammen logischer weiserepeat(Traversal), times(n) | until(Bedingung) repeat(Traversal)
: wiederholt das Traversal n mal | bis die Bedingung erfüllt ist Bsp:g.V().repeat(out()).until(has("name", "Söder")).path().toList() => [path[v[1], v[3], "Markus"], path[v[1], v[4], "Söder"]]
Terminal Steps:
- toList(): Liste mit allen Elementen
- toSet(): Menge mit allen Elementen
- next(): das erste Ergebnis des Traversals:
g.V().next()
gibt den ersten Knoten zurück. - next(n): ersten n Ergbnisse
- hasNext(): guckt ob es ergbnisse gibt
- iterate(): führt das Traversal aus, gibt aber nichts zurück
Back to Overview | Vorheriges: Hello-World