我正在嘗試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