如何解决如何将顶点属性与指向它的边缘的边缘权重相乘?
我陷入了我似乎遇到的图遍历问题。我使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。