为多个顶点中的每一个添加不同的值

Add different values to each of multiple vertices

我知道我可以一步 select 通过 id 的多个特定顶点,例如(使用 gremlin-python 语法):

g.V([1, 2, 3]).next()
>>> [v[1], v[2], v[3]]

我怎样才能为每个 selected 项目添加一个具有不同值的 属性?例如,我想要:

所以我希望可以这样说:

g.V([1, 2, 3]).<add property 'x' with values ['a', 'b', 'c']>.next()

可能吗?

您可以使用 choose() 来完成类似于 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() 运行时生成的密钥,该密钥仅在该版本中添加。

我不认为你可以使用 "x" 的 Map 的键来处理没有 lambda 的顶点查找(也许我没有考虑简单的事情),所以不幸的是你必须指定两次 id,但你可以很容易地参数化它,因为你只需要构造 Map 然后从中获取 .keys()V().