我正在尝试arangodb中一个相当基本的任务,使用SUM()聚合函数。使用AQL在arangodb中聚合
这里是一个工作的查询返回正确的数据(虽然尚未汇总):
FOR m IN pkg_spp_RegMem
FILTER m.memberId == "40289"
COLLECT member = m.memberId INTO g
RETURN { "memberId" : member, "amount" : g[*].m[*].items }
这将返回以下结果:
[
{
"memberId": "40289",
"amount": [
[
{
"amount": 50,
"description": "some description"
}
],
[
{
"amount": 50,
"description": "some description"
},
{
"amount": 500,
"description": "some description"
},
{
"amount": 0,
"description": "some description"
}
],
[
{
"amount": 0,
"description": "some description"
},
]
]
}
]
我使用收集到组的业绩,因为给定的memberId可能有多个'RegMem'对象。从查询/结果中可以看到,每个对象都有一个名为'items'的小对象列表,每个对象都有一个数量和一个描述。
我想SUM()成员的金额。但是,像这样调整查询不起作用:
FOR m IN pkg_spp_RegMem
FILTER m.memberId == "40289"
COLLECT member = m.memberId INTO g
RETURN { "memberId" : member, "amount" : SUM(g[*].m[*].items[*].amount) }
它返回0,因为它显然无法在扩展项列表中找到名为amount的字段。
查看结果我可以理解为什么:结果被返回,使得项目实际上是一个列表,包含数量/描述的对象列表。但我不明白如何正确引用或展开未命名列表以返回SUM()函数的金额字段值。
理想情况下,查询应返回memberId和总金额,每行成员一行,以便我可以删除过滤器并为所有成员执行。
非常感谢您提前帮助您! Martin
PS我已经完成了arangodb网站上的AQL教程,并检查了手册,但真正帮助我的是加载更多示例查询来查看。如果有人知道这样的资源或想分享他们自己的一些资源,“非常有义务。干杯!
非常感谢您的帮助!我不知道flatten函数,但在调用它时出现错误:“[1540]使用未知函数'FLATTEN()'”。它是用户定义的吗?无论如何,我接受你的回答,我可以通过以下方式修改你提供的查询以获得所需的结果: FOR m IN pkg_spp_RegMem FILTER m.memberId ==“40289” COLLECT member = m.memberId INTO g RETURN {“memberId”:member,“amount”:SUM((for r IN g [*]。m [*]。items FOR i IN r RETURN i.amount))} – Martin
[FLATTEN ()](https://docs.arangodb.com/Aql/ArrayFunctions.html)绝对是一个标准的数组函数。从v2.7开始,您还可以使用新的多星运算符:https://www.arangodb.com/2015/06/aql-improvements-for-2-7/ – CoDEmanX