2016-05-13 1 views
3

Этот запрос работает:Изменение AQL, так что результат подзапрос сплющивается в двух отдельных массивов

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} 

И дает мне это:

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

Но что я действительно хочу что-то вроде этого

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

Я ожидал, что следующий запрос будет работать, но инструкции PUSH не сработают (синтаксическая ошибка), я попробовал кучу P USH заявление в FOR петель, но не может заставить их работать, как я ожидал, предполагающее бы я делаю что-то абсолютно умственного

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} 

Любой совет будет здорово!

+0

Вы догадались, престижность! Замечание к PUSH: оно позволяет добавлять элемент, но вы не можете переопределить существующую переменную - вы пытались изменить переменные 'data' и' frequency' (несколько раз), но это недопустимо (не побочный эффект свободный). AQL не является полным языком программирования, и это специально: запросы могут быть оптимизированы очень сильно из-за присущих AQL ограничений. Обычно существуют чистые решения AQL, хотя, например, используются подзапросы. – CoDEmanX

+0

, поскольку вы нашли ответ на свою проблему уже, можете ли вы пометить свой ответ как принятый? ;-) – dothebart

ответ

3

И, после того, как некоторые более бесполезный - это, кажется, именно то, что мне было нужно:

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} 

 Смежные вопросы

  • Нет связанных вопросов^_^