Arangodb 使用AQL对聚合结果进行迭代将返回预期平均值/和值的空值

Arangodb 使用AQL对聚合结果进行迭代将返回预期平均值/和值的空值,arangodb,aql,Arangodb,Aql,我想在arangoDB(2.3.1)实例上执行AQL查询,以计算两个平均值(average\u value)之间的差值(其中res可能是另一个子查询结果): 但即使只是 FOR l IN last RETURN l 我确实得到了“name”,但“average_value”将为空。这是否按设计工作,或者如何从子查询访问聚合值?在不访问数据的情况下,在我看来,.r[*].value是问题的根源 在定义了r的两个FOR循环中,r是对单个文档的引用。在单个文档上使用展开运算符([*])将生成

我想在arangoDB(2.3.1)实例上执行AQL查询,以计算两个平均值(average\u value)之间的差值(其中res可能是另一个子查询结果):

但即使只是

FOR l IN last
    RETURN l

我确实得到了“name”,但“average_value”将为空。这是否按设计工作,或者如何从子查询访问聚合值?

在不访问数据的情况下,在我看来,
.r[*].value
是问题的根源

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

您可以改为只使用
.r.value
而不是
.r[*].value

然后arangodb数据库应该做您想做的事情。

即使使用
.r.value
,在最后一次返回的l中使用
对聚合结果进行迭代,平均值返回null。顺便说一下,
RETURN last
将正确输出平均值。它只使用FOR循环,它将为平均值/总和返回空值。修改后的查询(使用
.r.value
而不是
.r[*].value
)在2.3和2.4中对我来说效果很好。但是,我无法访问您集合中的数据,因此我不知道您运行查询的数据类型。这是我的设置,查询返回平均值和差异:
db.\u create(“res”);对于(i=0;i<100;++i){db.res.save({date:(新日期(142050000000+5000000000*Math.random()).toISOString()),名称:“test”+(i%10),值:Math.random()*100};}
@stj使用r.value对我不起作用。我的数据结构是:[code]{“inst”:“A',“min”:3,“max”:4,“sum”:10},{“inst”:“B',“min”:2,“max”:3,“sum”:20}[/code],查询是:var Query=“LET xx=(对于原始数据中的m收集mm=m.inst到g返回{inst':mm,'max':max(展平(g[].m.max)),“min”:min(展平(g[].m.min)),'sum':对于in-xx,sum(展平(g[].m[].sum)))返回一个“我想前面评论中的所有
*
s都丢失了。请注意,代码片段应该包含在反勾中,而不是
[code]…[/code]
*
代码部分之外的字符将导致斜体或粗体格式,并且
*
字符本身不会被打印。再次讨论这个问题:我认为如果有一个
COLLECT…INTO
语句在子查询中生成聚合,则会出现一个问题,该语句后面紧跟着
RET之外的其他语句URN
,例如
让值=(对于…收集…到…返回…)对于值中的v,返回v
。在这种情况下,
收集到
生成的结果中的子属性可能有错误的属性名称,因此使用正确的属性名称访问它们将产生
null
。这是刚刚修复的。修复将在2.5.6和2.6.0稳定版本中提供。我也有相同的问题。是否存在其他问题我不知道这有什么解决办法。
FOR l IN last
    RETURN l