Я пытаюсь выполнить довольно простую задачу в arangodb, используя агрегатную функцию SUM ().
Вот рабочий запрос, который возвращает правильные данные (хотя и не агрегированные):
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"
},
]
]
}
]
Я использую Collect для группировки результатов, потому что данный memberId может иметь несколько объектов RegMem. Как видно из запроса / результатов, каждый объект имеет список более мелких объектов, называемых «элементами», причем каждый элемент имеет количество и описание.
Я хочу СУММАТЬ () суммы по участникам. Однако такая настройка запроса не работает:
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 в развернутом списке элементов.
Глядя на результаты, я могу понять, почему: результаты возвращаются так, что items на самом деле является списком, состоящим из списков объектов с количеством / описанием. Но я не понимаю, как правильно ссылаться или расширять безымянный список, чтобы вернуть значения поля суммы для функции SUM ().
В идеале запрос должен возвращать memberId и общую сумму, по одной строке на член, чтобы я мог удалить фильтр и выполнить его для всех членов.
Заранее большое спасибо, если вы можете помочь! Мартин
PS Я проработал учебник AQL на веб-сайте arangodb и проверил руководство, но что действительно могло мне помочь, так это загрузка большего количества примеров запросов для просмотра. Если кто-то знает о подобном ресурсе или хочет поделиться своими собственными, очень признателен. Ваше здоровье!