Gremlin 控制台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
存储在“person”变量中......或者是吗?
gremlin> person.class
==>class org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal
显然这不是一个Vertex
。 “人”是一个Traversal
,控制台会这样看待它并为您迭代它,这就是为什么您得到“v1” 在输出中。请注意,遍历现在已“完成”:
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
as a 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]
可以说,这可能不像将其分成两个或多个单独的遍历那样可读,但它是可以做到的。