Я застрял на проблеме обхода графа, которая у меня, кажется, есть. Я использую gremlinpython, а моя БД хранится в AWS Neptune.
График похож на этот пример:
g = TinkerGraph.open().traversal()
o1 = g.addV('o').property('order','order1').next()
r1 = g.addV('r').property('recipe', 'recipe1').property('price', 3).next()
r2 = g.addV('r').property('recipe', 'recipe2').property('price', 3).next()
r3 = g.addV('r').property('recipe', 'recipe3').property('price', 3).next()
g.V(o1).addE('orders').to(r1).property('amount',2)
g.V(o1).addE('orders').to(r2).property('amount',3)
g.V(o1).addE('orders').to(r2).property('amount',4)
Теперь я хотел бы рассчитать общую стоимость заказа, умножив значения рецепта на соответствующие суммы граней и просуммировав их.
Пока мой код выглядит так:
g.withSack(0).V('o1')\
.out()\
.sack(Operator.sum).by('price')\
.sack(Operator.mult)\
.by(g.V('o1').outE().values('amount')).sack().toList()
==>[6,6,6]
Я заметил, что этот код будет умножать каждое значение рецепта только на количество первых ребер, но не на соответствующие суммы. Я не уверен, как указать в операции sack (). By (), чтобы каждая вершина умножалась на соответствующее количество ребер.