2017-06-19 4 views
2

Ich bin neu sowohl in ArangoDB als auch in der graphbasierten Traversalabfrage.Wie konstruiere (projiziere) ich ein RETURN-Objekt in ArangoDB basierend auf den während der Graphtraversierung besuchten Scheitelpunkten

Hier ist wie mein Diagramm derzeit strukturiert ist. Jeder Knoten hat mindestens ein Attribut (Schlüssel/Wert-Paar). Sie können sich vorstellen, dass es einen Abhängigkeitsbaum gibt. Jeder Elternknoten (mit seinen eigenen Eigenschaften) ist abhängig von einem Kindknoten (wiederum mit eigenen Eigenschaften). Es gibt keine Vererbungsbeziehung von Eltern zu Kind.

Lets für dieses Beispiel sagen:

vertex1 hat {key1: value1}

Vertex2 hat {key2: Wert2, key3: value3}

vertex3 hat {Schlüssel4: Wert4}

Vertex4 hat {key5: value5}

enter image description here

Ich habe die Grund Graph Traversal von der Dokumentation heraus aber ich das zurückgebrachte Objektstruktur eine spezifische Anforderung Strukturierung haben auf der Grundlage der Eckpunkte vorhanden (besuchten) ausgehend von Vertex1 bis zum MaxDepth.

RETURN-Objekt muss die folgende Struktur haben: Wie Sie sehen können, wenn die Scheitelpunkttiefe zunimmt, wird das Objekt unter dem übergeordneten Knoten verschachtelt.

{ 
    vertex1: { 
    key1:value1 
    vertex2: { 
     key2:value2, 
     key3:value3, 
     vertex3: { 
     key4:value4 
     } 
    } 
    vertex4: { 
     key5:value5 
    } 
    } 
} 

ich Sie nicht fragen kann die Abfrage für mich zu schreiben, aber jede Hilfe dankbar ist viel und ich in der richtigen Richtung gesetzt würde.

Basierend auf meinem aktuellen Verständnis:

FOR v IN 1..2 OUTBOUND 'vertex1' GRAPH 'grapgName' 
//I'm guessing I would have to COLLECT and GROUP 
//on the existing vertex to projected object structure. 
//I just don't know how :(
RETURN returnObj 

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen

+0

Jetzt, wo ich daran denke .. ist es sogar möglich, das obige Ergebnis mit einer einzigen Abfrage zu erreichen .. Unterstützt aql Rekursion? Wenn nicht, ist es sinnvoll, im foxx-Service eine Rekursionslogik hinzuzufügen? – Pramodh

+0

Meiner Meinung nach macht es Sinn, die Rekursion in einem Foxx-Dienst zu implementieren. – fceller

Antwort

2

Es ist nicht möglich, das obige Ergebnis ausschließlich mit AQL zurückkehren, weil Rekursion nicht unterstützt wird . Eine Lösung wäre, AQL um eine selbstaufrufende benutzerdefinierte Funktion (UDF) zu erweitern. Weitere Informationen zu UDFs finden Sie unter https://docs.arangodb.com/3.2/AQL/Extending/.

+0

Ein Link zu einer Lösung ist willkommen, aber stellen Sie bitte sicher, dass Ihre Antwort ohne sie nützlich ist: [Fügen Sie einen Kontext um den Link hinzu] (https://meta.stackexchange.com/a/8259), damit Ihre Mitbenutzer eine Idee haben es ist und warum ist es da, dann zitieren Sie den relevantesten Teil der Seite, auf die Sie verlinken, falls die Zielseite nicht verfügbar ist. [Antworten, die kaum mehr als ein Link sind, können gelöscht werden] (https://stackoverflow.com/help/deleted-answers). –

Verwandte Themen