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

How do I multiply a vertex property with an edge weight from an edge pointing to it?

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

您用于创建数据的 Gremlin 脚本需要一些修复:

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