2014-10-27 7 views
8

Ist es möglich, Dokumente aus verschiedenen Sammlungen in ArangoDB zu verknüpfen, wie es in OrientDB ist?ArangoDB Link-Dokumente

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 Edge-Sammlungen 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 von anderen Entitäten geteilt werden.

Vielen Dank im Voraus.

Antwort

12

Es gibt zwei Optionen:

  1. Mit Joins

    Sie können ein Attribut auf dem Hauptdokument enthält Informationen definieren, die das Teildokument (zB durch seine _key) identifiziert und dann AQL verwenden zu verbinden, die beiden Dokumente in Ihrer Suchanfrage:

    FOR x IN maindocuments FILTER x.whatever < 42 FOR y in secondarydocuments FILTER x.sub = y._key RETURN MERGE(x,y)

  2. Verwendung von Kanten

    Sie können eine Kantensammlung definieren, die alle "Beziehungen" zwischen Ihren Dokumenten enthält. Die Randdokumente 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 ist es nicht so etwas wie ein Fremdschlüssel in ArangoDB. Sie können auf nicht existierende Dokumente in Ihren Edges verweisen oder das Subdokument löschen, ohne das Hauptdokument zu informieren. Der Vorteil des zweiten Ansatzes besteht darin, dass Sie eine beliebige Anzahl von Kanten zwischen diesen Dokumenten verwenden und sogar 0, 1 oder mehr während der Laufzeit Ihrer Anwendung ohne jegliche Änderung entscheiden können. Bei der ersten Vorgehensweise müssen Sie am Anfang entscheiden, dass das Attribut ein einzelner Wert oder eine Liste von Werten ist.

+1

Gibt es irgendwelche Vorteile des ersten Ansatzes? Ist es z.B. einfacher in Abfragen zu verwenden, unterschiedliche Leistung? – specimen