问题描述
我陷入了我似乎遇到的图遍历问题。我使用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