2016-02-25 3 views
3

У меня есть простой график для отслеживания людей, которым я дал деньги. Так график выглядит следующим образом:ArangoDB - как выполнить вычисления в обходах графика?

userB -- owes to (amount: 200) --> userA 

userC -- owes to (amount: 150) --> userA 

и так далее ...

Допустим, вам нужно узнать, сколько денег причитается каждому пользователю, используя график обхода. Как вы это реализуете?

ответ

3

Позвольте мне объяснить это с помощью city example graph Вершины (города) имеют числовой атрибут, population; Края (шоссе) имеют числовой атрибут distance.

Проверка, что мы ожидаем sumarize:

FOR v, e IN 1..1 INBOUND "frenchCity/Lyon" GRAPH "routeplanner" 
    RETURN {city: v, highway: e} 

Подытоживая население всех пройденных городов легко:

RETURN SUM(FOR v IN 1..1 INBOUND "frenchCity/Lyon" GRAPH "routeplanner" 
      RETURN v.population) 

При этом используется подзапрос, а это значит, все значения возвращаются, и затем на них выполняется операция SUM.

Его лучше использовать COLLECT AGGREGATE, чтобы суммировать атрибуты во время обхода.

Таким образом, хотя в контексте населения городов и их расстояния не может иметь смысл sumerize эти цифры, позволяет сделать это в любом случае:

FOR v, e IN 1..1 INBOUND "frenchCity/Lyon" GRAPH "routeplanner" 
    COLLECT AGGREGATE populationSum = SUM(v.population), distanceSum = SUM(e.distance) 
    RETURN {population : populationSum, distances: distanceSum} 
+0

Большое спасибо еще раз за быстрый и полезный ответ! : D –

Смежные вопросы