2017-03-22 1 views
0

Je suis relativement nouveau dans ArangoDB et AQL et ma question concerne les valeurs de tableau imbriquées. Je ne sais pas s'il y a moyen de le faire (ou même si ma requête est écrite efficacement)Valeurs de tableau imbriquées AQL

Pour être bref, j'ai 2 collections. Un pour "Médecins" et un pour "Indications". Chaque fois que mon patient consulte un médecin pour une consultation, la liste de ses symptômes est enregistrée dans la collection Indications. Cependant, un diagnostic antérieur peut avoir été fait par un autre docteur. Dans ce cas, ma syntaxe AQL ressemble à ceci:

FOR p in Patients 
FILTER p._key=="cad010117" 
RETURN { 
    "name" : CONCAT(p.pfname, " ", p.plastname), 
    "consultations" : (
     FOR i in Indications 
     FILTER i.pat_id == p._key 
      FOR d in Physicians 
      FILTER i.ind_consul_doc == d._key 

      RETURN { 
       "Doctor" : CONCAT(d.dtitle, " ", d.dfirstname, " ", d.dlastname), 
       "Consult Date" : i.ind_consul_dt, 
       "Symptoms" : i.symptoms[*], 
       "Past Diagnoses" : i.diagnosis[* RETURN { 
         "Condition" : CURRENT.diag, 
         "Diagnosed on" : CURRENT.diag_dt, 
         "Diagnosed by" : CURRENT.diag_doc 
        } 
       ] 
      } 
    ) 

Mes résultats correspondants:

[ 
    { 
    "name": "Alfred Jeffries", 
    "consultations": [ 
     { 
     "Doctor": "Dr Anthony Garcia", 
     "Consult Date": "22nd Jun 2016", 
     "Symptoms": [ 
      { 
      "type": "hyperpyrexia", 
      "details": "Temperature: 101", 
      "duration": "3d" 
      }, 
      { 
      "type": "anxiety", 
      "details": "Severe", 
      "duration": "1w" 
      }, 
      { 
      "type": "mania", 
      "details": "Moderate", 
      "duration": "1w" 
      }, 
      { 
      "type": "diaphoresis", 
      "details": "Increased sweating during the day only", 
      "duration": "3d" 
      } 
     ], 
     "Past Diagnoses": [ 
      { 
      "Condition": "Bipolar Disorder", 
      "Diagnosed on": "6th Jul 2016", 
      "Diagnosed by": "dc666555" 
      } 
     ] 
     } 
    ] 

Ma question est, pour le tableau Diagnostique passé retourné, le diag_doc champ, qui est une valeur à l'intérieur du tableau de diagnostic de ma collection "Indications", correspond à une valeur clé dans la collection "Médecins" du médecin ayant posé le diagnostic. Quel serait le meilleur moyen de retourner tous les détails du diag_doc en utilisant AQL? Merci d'avance.

PS: J'utilise ArangoDB 3.1.12

Répondre

1

Vous pouvez utiliser une sous-requête pour récupérer les données de la collection Physicians:

"Past Diagnoses": (FOR d IN i.diagnosis RETURN 
    { 
    "Condition" : d.diag, 
    "Diagnosed on" : d.diag_dt, 
    "Diagnosed by" : FIRST(FOR doc IN Physicians FILTER doc._key == d.diag_doc RETURN doc) 
    } 
) 
+0

Merci une tonne! Travaillé comme un charme :) –