的小鬼控制檯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
注意,您將有下降的進一步的問題在你的腳本行,因爲你用什麼現在將是一個Vertex
爲Traversal
,所以這行:
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]
可以說,這可能不如將它分成兩個或多個單獨的遍歷那樣可讀,但它可以完成。
感謝。我知道了。你還可以從用戶轉換邊緣建議 - 一個漂亮的穿越族 - 用戶 - - ** is_invited_to_join ** ** ** is_member_of? – Vibgy
更新了答案 –