使用AQL迭代聚合结果会返回预期平均值/总和值的空值

时间:2015-03-03 16:03:11

标签: arangodb aql

我想在我的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

我确实得到了"名称"但是" average_value"将为null。这是按设计工作还是如何从子查询中访问聚合值?

1 个答案:

答案 0 :(得分:2)

在没有访问数据的情况下,我认为.r[*].value导致了问题。

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

您可以做的只是使用.r.value代替.r[*].value。 然后arangodb数据库应该做你想要的。