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

问题描述

我陷入了我似乎遇到的图遍历问题。我使用gremlinpython,我的数据库存储在AWS Neptune中。

该图看起来类似于以下示例:

#include<iostream>
#define combine(a,b,c) a##b##c
int main()
{
    std::cout<<combine(2+2,3+3,5+5);
    return 0;
}

现在,我想通过将配方值与其指定的边值相乘并求和来计算订单的总成本。

到目前为止,我的代码如下:

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)

我注意到该代码只会将每个配方值与第一个边缘量相乘,而不会与各自的量相乘。 我不确定如何在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