Совокупный объем с нерегулярной иерархией продуктов в 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 для всех продуктов (поскольку это общий уровень)? Я предполагаю, что должно быть изменение в логике агрегации, но не уверен, как.

0 ответов

Другие вопросы по тегам