2016-05-13 9 views
3

Diese Abfrage funktioniert:Ändern AQL, so dass Unterabfrageergebnis in zwei separate Arrays abgeflacht ist

FOR person IN 1..1 INBOUND @companyID employed_by 
    LET age = DATE_DIFF(person.age * 1000, @currentTime * 1000, 'y') 
    COLLECT label = age WITH COUNT INTO value 
     RETURN {data: label, frequency: value} 

Und gibt mir dies:

[ 
    { 
     data: 18, 
     frequency: 69 
    }, 
    { 
     data: 19, 
     frequency: 73 
    }, 
    { 
     data: 20, 
     frequency: 86 
    } 
] 

Aber was ich will ist wirklich so etwas wie dieses

Ich erwartete die folgende Abfrage zu arbeiten - aber die PUSH-Anweisungen fehlschlagen (Syntaxfehler), versuchte ich eine Reihe von P USH-Anweisungen in FOR-Schleifen, kann sie aber nicht bekommen zu arbeiten, wie ich erwarten, die ich etwas tue absolut geistige

LET data = [] 
LET frequency = [] 
LET temp = 
     (
      FOR person IN 1..1 INBOUND @companyID employed_by 
       LET age = DATE_DIFF(person.age * 1000, @currentTime * 1000, 'y') 
       COLLECT label = age WITH COUNT INTO value 
        data = PUSH(data, label) 
        frequency = PUSH(frequency, value) 
        RETURN true 
     ) 
RETURN {data: data, frequency: frequency} 

Jede Beratung wäre toll bedeuten würde!

+0

Sie es herausgefunden, ein dickes Lob! Eine Anmerkung zu PUSH: Sie können ein Element anhängen, aber Sie können eine vorhandene Variable nicht neu definieren - Sie haben versucht, die Variablen 'data' und' frequency' (mehrfach) zu ändern, aber es ist nicht erlaubt (nicht Nebenwirkung frei). AQL ist keine vollständige Programmiersprache, und dies ist absichtlich: Abfragen können aufgrund der inhärenten Einschränkungen von AQL sehr optimiert werden. Es gibt jedoch normalerweise reine AQL-Lösungen, zum Beispiel mit Unterabfragen. – CoDEmanX

+0

Da Sie die Antwort auf Ihr Problem bereits gefunden haben, können Sie Ihre Antwort als akzeptiert markieren? ;-) – dothebart

Antwort

3

Und nach einigem mehr geigen - das scheint genau das zu sein, was ich brauchte:

LET temp = 
    (
     FOR person IN 1..1 INBOUND @companyID employed_by 
      LET age = DATE_DIFF(person.age * 1000, @currentTime * 1000, 'y') 
      COLLECT label = age WITH COUNT INTO value 
       RETURN {data: label, frequency: value} 
    ) 
RETURN {data: temp[*].data, frequency: temp[*].frequency}