2016-11-17 120 views
1

我想放棄的邊緣,並添加兩個頂點之間的新優勢。我如何在Tinkerpop3中做到這一點?如何去除邊並在兩個頂點之間添加新邊?

def user = g.V().has("userId", 'iamuser42').has("tenantId", 'testtenant').hasLabel('User'); 
user.outE("is_invited_to_join").where(otherV().has("groupId", 'test123')).drop(); 
def group = g.V().has("groupId", 'test123').has("tenantId", 'testtenant').hasLabel('Group').next(); 
user.addEdge("is_member_of", group); 

這是我得到的小鬼殼錯誤:

No signature of method: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.addEdge() is applicable for argument types: (java.lang.String, com.thinkaurelius.titan.graphdb.vertices.CacheVertex) values: [is_member_of, v[8224]] 

謝謝。

回答

5

的小鬼控制檯tutorial討論這個問題有點。你沒有迭代你的遍歷。考慮以下幾點:

gremlin> graph = TinkerFactory.createModern() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> g = graph.traversal() 
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard] 
gremlin> person = g.V().has('name','marko') 
==>v[1] 

太好了!該人Vertex存儲在「人」變量中...或者它是什麼?

gremlin> person.class 
==>class org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal 

顯然,這不是一個Vertex。 「人」是一個Traversal,控制檯將其視爲這樣的迭代和爲你這就是爲什麼你在輸出中得到「V 1」。需要注意的是遍歷現在是「做」:

gremlin> person.hasNext() 
==>false 

您需要的Traversal迭代到您的變量 - 在這種情況下,使用next()

gremlin> person = g.V().has('name','marko').next() 
==>v[1] 
gremlin> person.class 
==>class org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex 

注意,您將有下降的進一步的問題在你的腳本行,因爲你用什麼現在將是一個VertexTraversal,所以這行:

user.outE("is_invited_to_join").where(otherV().has("groupId", 'test123')).drop(); 

立即將失敗,類似的錯誤,因爲Vertex不會有outE()。你需要做的是這樣的:

g.V(user).outE("is_invited_to_join").where(otherV().has("groupId", 'test123')).drop(); 

如果你想添加的邊緣和刪除舊在同一個遍歷,你可以做這樣的事情:

gremlin> graph = TinkerFactory.createModern() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> g = graph.traversal() 
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard] 
gremlin> g.V(1).outE('knows') 
==>e[7][1-knows->2] 
==>e[8][1-knows->4] 
gremlin> g.V(1).as('a').outE().as('edge').inV().hasId(2).as('b').addE('knew').from('a').to('b').select('edge').drop() 
gremlin> g.V(1).outE('knew') 
==>e[12][1-knew->2] 
gremlin> g.V(1).outE('knows') 
==>e[8][1-knows->4] 

可以說,這可能不如將它分成兩個或多個單獨的遍歷那樣可讀,但它可以完成。

+0

感謝。我知道了。你還可以從用戶轉換邊緣建議 - 一個漂亮的穿越族 - 用戶 - - ** is_invited_to_join ** ** ** is_member_of? – Vibgy

+0

更新了答案 –

相關問題