ArangoDB Link-Dokumente

8

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.

    
GBrian 27.10.2014, 14:24
quelle

1 Antwort

12

Es gibt zwei Möglichkeiten:

  1. 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)

  2. 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.

    
mchacki 27.10.2014, 14:49
quelle