Gremlin コンソールのチュートリアルでは、この問題について少し説明しています。トラバーサルを繰り返していません。次の点を考慮してください。
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]
おそらく、それは 2 つ以上の別々のトラバーサルに分割するほど読みにくいかもしれませんが、それは可能です。