2017-06-19 3 views
2

Je suis nouveau dans les requêtes de traversée ArangoDB et Graph.Dans ArangoDB, comment puis-je construire (projeter) un objet RETURN basé sur les sommets visités lors de la traversée de graphe?

Voici comment mon graphique est actuellement structuré. Chaque sommet aura au moins un attribut (paire clé-valeur). Vous pouvez penser qu'il a un arbre de dépendance. Chaque nœud parent (avec ses propres propriétés) dépend du nœud enfant (avec ses propres propriétés). Il n'y a pas d'héritage juste parent de parent à enfant.

Disons que pour cet exemple:

vertex1 a {key1: valeur1}

vertex2 a {key2: valeur2, key3: value3}

vertex3 a {key4: value4}

vertex4 a {key5: valeur5}

enter image description here

J'ai compris le parcours graphique de base de la documentation mais j'ai une structuration des besoins spécifiques de la structure de l'objet retournâmes sur la base des sommets actuels (visité) à partir de vertex1 jusqu'au maximum.

L'objet RETURN doit avoir la structure suivante: comme vous pouvez le voir lorsque la profondeur du sommet augmente et que l'objet est imbriqué sous le nœud parent.

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

Je ne peux pas vous demander d'écrire la requête pour moi, mais toute aide est très appréciée et me mettre dans la bonne direction.

Sur la base de ma compréhension actuelle:

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 

Laissez-moi savoir si vous avez besoin d'informations supplémentaires

+0

Maintenant que j'y pense .. est-il même possible d'atteindre le résultat ci-dessus avec une seule requête .. est-ce que la prise en charge de récursivité aql? Si non, est-ce logique d'ajouter une logique de récursivité dans le service foxx? – Pramodh

+0

À mon avis, il est logique d'implémenter la récursivité dans un service foxx. – fceller

Répondre

2

Il est impossible de retourner le résultat ci-dessus exclusivement AQL parce récursion est pas pris en charge . Une solution consisterait à étendre AQL avec une fonction définie par l'utilisateur auto-appelée (UDF). Plus d'informations sur les FDU peuvent être trouvées au https://docs.arangodb.com/3.2/AQL/Extending/.

+0

Un lien vers une solution est le bienvenu, mais s'il vous plaît assurez-vous que votre réponse est utile sans: [ajouter un contexte autour du lien] (https://meta.stackexchange.com/a/8259) pour que vos amis utilisateurs aient une idée de ce que c'est et pourquoi c'est là, puis citez la partie la plus pertinente de la page que vous liez au cas où la page cible n'est pas disponible. [Les réponses qui sont un peu plus d'un lien peuvent être supprimées] (https://stackoverflow.com/help/deleted-answers). –