Изменение 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 не работают (синтаксическая ошибка), я попробовал кучу операторов PUSH в циклах 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}

Любой совет будет полезен!


person IaMaCuP    schedule 13.05.2016    source источник
comment
Вы догадались, престижность! Примечание о PUSH: он позволяет вам добавить элемент, но вы не можете повторно определить существующую переменную - вы пытались изменить переменные data и frequency (несколько раз), но это не разрешено (не без побочных эффектов ). AQL не является полноценным языком программирования, и это сделано специально: запросы можно значительно оптимизировать из-за присущих AQL ограничений. Однако обычно существуют чистые решения AQL, например, с использованием подзапросов.   -  person CodeManX    schedule 14.05.2016
comment
Поскольку вы уже нашли ответ на свою проблему, можете ли вы отметить свой ответ как принятый? ;-)   -  person dothebart    schedule 17.05.2016


Ответы (1)


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

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}
person IaMaCuP    schedule 13.05.2016