2016-05-13 67 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在FOR循环,但不能让他们如我所料工作USH报表,这将意味着我正在做的事情绝对精神

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} 
相关问题