使用AQL在arangodb中进行聚合
我正在使用SUM()聚合函数在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,{ "amount": 0,[ { "amount": 0,] ] } ] 我使用Collect对结果进行分组,因为给定的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和总金额,每个成员一行,以便我可以删除过滤器并为所有成员执行. 非常感谢您提供帮助! PS我已经在arangodb网站上完成了AQL教程,并查看了手册,但真正帮助我的是加载更多示例查询来查看.如果有人知道这样的资源或者想要分享他们自己的资源,那就非常有帮助.干杯!
编辑:第一次误读了这个问题.第一个可以在theedit历史中看到,因为它还包含一些提示:
我通过以这种格式创建一些文档来复制您的数据(有些只有一个项目): { "memberId": "40289","items": [ { "amount": 50,"description": "some description" },{ "amount": 500,"description": "some description" } ] } 基于某些类型的文档,您的非汇总查询应该看起来像这样: 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","description": "some description" } ] ] } ] 基于非汇总版本,您需要遍历由collect函数生成的组的项目并在那里执行SUM(). FOR m IN pkg_spp_RegMem FILTER m.memberId == "40289" COLLECT member = m.memberId INTO g RETURN { "memberId" : member,"amount" : SUM( FLATTEN( ( FOR r in g[*].m[*].items RETURN r[*].amount ) ) ) } 这导致: [ { "memberId": "40289","amount": 1250 } ] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |