Совокупный объем с нерегулярной иерархией продуктов в Arangodb AQL
Я хотел бы объединить объем счетов по иерархии продуктов. Однако иерархия не имеет одинакового количества уровней для всех продуктов. Например, ниже приведены иерархии двух продуктов:
Prod1 (SKU) <- Hierarchy Level (HL) 5 <- HL 4 <- HL 3 <- HL 2 <- HL 1
Prod2 (SKU) <- HL 3 <- HL 2 <- HL 1
Все продукты имеют уровень 3 и выше, но могут иметь несколько уровней между уровнем 3 и sku (в иерархии может быть до 8 уровней, включая sku).
Текущая модель БД для счетов выглядит так:
Customer <-IsBilled-- Invoice --containsProd-> product <- IsParentOf-- product
Следующий запрос хорошо агрегирует, но опирается на фиксированное количество переходов по ребрам
for v,e,p in 1..4 INBOUND 'customer/A'
IsBilled, OUTBOUND containsProd, isParentOf
filter p.edges[0]._from == 'invoice/541280' //limit data to a single invoice
collect vname = p.vertices[4].name, vlevel = p.vertices[4].hierarchyLevel
AGGREGATE qtySum = sum( p.edges[1].quantity ) //aggregates two levels up in the product hierarchy (hops 1 and 2 get from customer to invoice to product)
filter vname != null. //remove vertices that are not products
return { Product: vname, hierarchyLevel: vlevel, qty:qtySum}
Заявление выше получает данные как:
Product hierarchyLevel qty
PrdA HL 4 20
PrdB HL 2 30
Можно ли вместо этого получить данные на уровне 3 для всех продуктов (поскольку это общий уровень)? Я предполагаю, что должно быть изменение в логике агрегации, но не уверен, как.