3

我想在我的 arangoDB (2.3.1) 实例上执行 AQL 查询,以计算两个平均值 ( average_value ) 之间的增量(res可能是另一个子查询结果):

LET last = (FOR r in res
    FILTER DATE_MONTH(r.date) == 1 AND DATE_YEAR(r.date) == 2015
    COLLECT name = r.name INTO g
    RETURN {"name":name,"average_value":AVERAGE(g[*].r[*].value)}
    )
LET current = (FOR r in res
    FILTER DATE_MONTH(r.date) == 2 AND DATE_YEAR(r.date) == 2015
    COLLECT name = r.name INTO g
    RETURN {"name":name,"average_value":AVERAGE(g[*].r[*].value)}
    )
FOR l IN last
    FOR c IN current
         FILTER c.name == l.name
         RETURN {"name":c.name,"delta":c.average_value-l.average_value}

但即使只有

FOR l IN last
    RETURN l

我确实得到了“名称”,但“平均值”将为空。这是按设计工作还是如何从子查询中访问聚合值?

4

1 回答 1

2

在无法访问数据的情况下,在我看来.r[*].value是导致问题的原因。

在其中定义的两个FOR循环内部,是对单个文档的引用。在单个文档上使用扩展运算符 ( ) 将产生,因为该运算符只能用于列表/数组。rr[*]null[*]

你可以做的是使用 just.r.value而不是.r[*].value. 然后 arangodb 数据库应该做你想做的事。

于 2015-03-04T09:34:55.017 回答