Graph 如何将顶点特性与指向它的边的边权重相乘?

Graph 如何将顶点特性与指向它的边的边权重相乘?,graph,gremlin,tinkerpop,amazon-neptune,gremlinpython,Graph,Gremlin,Tinkerpop,Amazon Neptune,Gremlinpython,我似乎遇到了一个图形遍历问题。我使用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(

我似乎遇到了一个图形遍历问题。我使用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()操作中指定每个顶点应与相应的边量相乘。

创建数据的小精灵脚本需要一些修复:

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)
您的方法非常接近,希望我的小改动对您有意义:

gremlin> g.withSack(0).V(o1).
......1>   outE().
......2>   sack(Operator.assign).by('amount').
......3>   inV().
......4>   sack(Operator.mult).by('price').
......5>   sack().
......6>   sum()
==>27