【发布时间】:2017-04-25 02:49:34
【问题描述】:
如何遍历图形并增加顶点属性的值?要么是某个固定数量,要么是通向它的边的属性中的一个数量。
例如。用下图:
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> a = g.addV('name','a','amount', 100).next()
==>v[0]
gremlin> b = g.addV('name','b','amount', 200).next()
==>v[3]
gremlin> c = g.addV('name','c','amount', 300).next()
==>v[6]
gremlin> a.addEdge('fill', b, 'bonus', 20)
==>e[9][0-drain->3]
gremlin> b.addEdge('fill', c, 'bonus', 40)
==>e[10][3-drain->6]
gremlin>
所以
1) 如何将每个顶点增加10?
最后我想拥有:
gremlin> g.V().valueMap()
==>[amount:[110],name:[a]]
==>[amount:[210.0],name:[b]]
==>[amount:[310.00],name:[c]]
鉴于声明:
g.V(a).property('amount', X)
我想我正在尝试做类似的事情:
g.V(a).property('amount', g.V(a).values('amount').next()+10)
...但是对于我图中的所有顶点。看起来 Tinkerpop2 有 loop() 和 it.object 可能会有所帮助,但在 Tinkerpop3 中似乎没有
编辑:好的,我更近了,但不是很远:
gremlin> g.V().as('x').property('amount', select('x').by('amount')+10)
No signature of method: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.plus() is applicable for argument types: (java.lang.Integer) values: [10]
Possible solutions: sum(), take(int), sum(groovy.lang.Closure), is(java.lang.Object), use([Ljava.lang.Object;), drop(int)
Type ':help' or ':h' for help.
Display stack trace? [yN]
2) 我如何将每个顶点增加bonus 属性的值在fill 通向它的边缘。
最后我想拥有:
gremlin> g.V().valueMap()
==>[amount:[100],name:[a]]
==>[amount:[220.0],name:[b]]
==>[amount:[340.00],name:[c]]
我尝试使用sack 来执行此操作,但由于麻袋在整个遍历过程中累积数据,因此无法完全解决。我试图将withSack 放在repeat 子句中以尝试创建一个新的麻袋,但这没有用。我不知道如何将属性的值从一个顶点“传递”到下一个顶点的操作。
【问题讨论】:
标签: graph titan gremlin tinkerpop