像sum()这样的聚合函数的语法到底是什么?
例如,以下列结构为例:
let json = {
"ages": {
"age": [
"20",
"30",
"40"
]
}
}
且
for age in json.ages.age return age
返回
["20", "30", "40"]
在Arango 2.0.4中,以下所有代码段都返回“[1542]调用函数'SUM()'时使用的参数类型无效”:
// LR
let ages = (for age in json.ages.age return age)
return sum(ages)
// LR
let ages = (
for age in json.ages.age
return age
)
return sum((for age in json.ages.age return age))
// R
return sum((for age in json.ages.age return age))
正确的语法是什么?
语法页面(http://www.arangodb.org/manuals/current/Aql.html#AqlFunctionsList)似乎没有任何相关范例。
我能找到的最接近语法示例的是:https://www.arangodb.org/foxx
controller.get("/revenue/:year", function (req, res) {
var query = "RETURN SUM((FOR bill IN billcollection FILTER bill.year == @year RETURN bill.amount))";
var stmt = db._createStatement({ "query": query});
stmt.bind("year",parseInt(req.params("year"),10));
var c = stmt.execute();
res.json(c);
});
但是上面的语法似乎对我来说是失败的。
是否有更详细的语法参考?
1条答案
按热度按时间inb24sb21#
你的方法是正确的,但你在文件中漏掉了一个小地方。)
在SUM()的文档中,它说:
SUM(list):返回list中值的总和。这要求list中的元素为数字。空值将被忽略。
(Docs请参阅:)
请注意**“这要求列表中的元素为数字”**
因此,JSON示例的列表中应该包含数字,而不是字符串。
将上面的代码片段复制并运行到AQL编辑器中应该会得到所需的结果:
当然,您也可以保持json不变,并通过相应地更改AQL查询将字符串类型转换为数字: