Gremlin 向多个顶点中的每个顶点添加不同的值

Gremlin 向多个顶点中的每个顶点添加不同的值,gremlin,tinkerpop,Gremlin,Tinkerpop,我知道我可以在一个步骤中按id选择多个特定顶点,例如(使用gremlin python语法): 然后,如何向每个选定项添加具有不同值的属性?例如,我希望: 顶点1具有值为“a”的属性“x” 顶点2具有值为“b”的属性“x” 顶点3具有值为“c”的属性“x” 所以我想说: g.V([1, 2, 3]).<add property 'x' with values ['a', 'b', 'c']>.next() g.V([1,2,3])…下一步() 有可能吗?你可以用它来完成一些类

我知道我可以在一个步骤中按id选择多个特定顶点,例如(使用gremlin python语法):

然后,如何向每个选定项添加具有不同值的属性?例如,我希望:

  • 顶点1具有值为“a”的属性“x”
  • 顶点2具有值为“b”的属性“x”
  • 顶点3具有值为“c”的属性“x”
所以我想说:

g.V([1, 2, 3]).<add property 'x' with values ['a', 'b', 'c']>.next()
g.V([1,2,3])…下一步()
有可能吗?

你可以用它来完成一些类似的事情,它会给你if-then-else类型的分支。使用TinkerPop发行版附带的现代玩具图:

gremlin> g.V(1,2,3).
......1>   choose(id()).
......2>     option(1, property('switch','a')).
......3>     option(2, property('switch','b')).
......4>     option(3, property('switch','c')).iterate()
gremlin> g.V(1,2,3).
......1>   project('id','switch').
......2>     by(id).
......3>     by('switch')
==>[id:1,switch:a]
==>[id:2,switch:b]
==>[id:3,switch:c]
从TinkerPop 3.3.3开始,您还可以使用副作用执行类似操作:

gremlin> g.withSideEffect('x',[1:'a',2:'b',3:'c']).
......1>   V(1,2,3).as('v').
......2>     property('switch', select('x').
......3>                        select(select('v').id()))
==>v[1]
==>v[2]
==>v[3]
gremlin> g.V(1,2,3).
......1>   project('id','switch').
......2>     by(id).
......3>     by('switch')
==>[id:1,switch:a]
==>[id:2,switch:b]
==>[id:3,switch:c]
您需要3.3.3+,因为您需要能够
select()


我不认为您可以在没有lambda的情况下使用“x”的
Map
键来处理顶点的查找(也许我没有想到简单的事情),因此不幸的是您必须指定两次ID,但是您可以非常容易地将其参数化,因为您只需要构造
Map
,然后获取
键()
从it给
V()

谢谢-对于少量选项来说,这是一个很好的答案,但它不能扩展到我希望使用的长列表。基于评论的更新答案-现在看起来怎么样?谢谢-这看起来确实像我想要的答案。不幸的是,我无法在gremlin python中使用它(3.3.3的服务器和python模块),可能是因为我提供映射的方式:
g.withSideEffect('x',[(1,'a'),(2,'b'),(3,'c')).V([1,2,3]).as_V('V').property('switch',select('x').select('V').id()).next()>>GremlinServerError:500:提供的遍历器没有映射到值:V[1]->[SelectOneStep(last,x),traversalselectonestep([SelectOneStep](最后,v),IdStep])
我会继续尝试,除非有人能发现我在这里做错了什么。副作用应该是一个
字典,所以在python中我会做
{1:'a',2:'b',3:'c'}
gremlin> g.withSideEffect('x',[1:'a',2:'b',3:'c']).
......1>   V(1,2,3).as('v').
......2>     property('switch', select('x').
......3>                        select(select('v').id()))
==>v[1]
==>v[2]
==>v[3]
gremlin> g.V(1,2,3).
......1>   project('id','switch').
......2>     by(id).
......3>     by('switch')
==>[id:1,switch:a]
==>[id:2,switch:b]
==>[id:3,switch:c]