Ist es möglich, Dokumente aus verschiedenen Sammlungen in ArangoDB zu verknüpfen, wie es in OrientDB ist?
In OrientDB können Sie ein Feld vom Typ LINK
erstellen und den verknüpften Typ angeben. Das schafft eine Beziehung zwischen beiden Dokumenten.
Muss ich in ArangoDB Kantensammlungen verwenden?
Ich versuche, eine Hauptsammlung und eine sekundäre Sammlung mit zusätzlichen Informationen zu definieren, um die Hauptgruppe zu ergänzen. Ich möchte nicht alle Daten in der Hauptsammlung haben, da diese zwischen anderen Entitäten geteilt werden.
Vielen Dank im Voraus.
Es gibt zwei Möglichkeiten:
Joins verwenden
Sie können im Hauptdokument ein Attribut definieren, das Informationen enthält, die das Unterdokument identifizieren (z. B. durch _key
) und dann AQL verwenden, um die beiden Dokumente in Ihrer Abfrage zu verknüpfen:
FOR x IN maindocuments
FILTER x.whatever < 42
FOR y in secondarydocuments
FILTER x.sub = y._key
RETURN MERGE(x,y)
Kanten verwenden
Sie können eine Kantensammlung definieren, die alle "Relationen" zwischen Ihren Dokumenten enthält. Die Edge-Dokumente können optional auch zusätzliche Informationen zu den Kanten selbst enthalten.
FOR x in maindocuments
LET n = NEIGHBORS("maindocuments", "edgecollection", x._id, "any");
RETURN MERGE(x, n[0].vertex);
Allerdings gibt es in ArangoDB keine Fremdschlüsseleinschränkung. Sie können auf nicht vorhandene Dokumente in Ihren Edges verweisen oder das Subdokument löschen, ohne dass das Hauptdokument informiert wird.
Der Vorteil des zweiten Ansatzes besteht darin, dass Sie eine beliebige Anzahl von Kanten zwischen diesen Dokumenten verwenden können und sich sogar während der Laufzeit Ihrer Anwendung für 0, 1 oder mehr entscheiden können, ohne dass Änderungen vorgenommen werden. Bei der ersten Vorgehensweise müssen Sie am Anfang entscheiden, dass das Attribut ein einzelner Wert oder eine Liste von Werten ist.
Tags und Links hyperlink join document-database arangodb