首页 > 解决方案 > 为多个顶点中的每一个添加不同的值

问题描述

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

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

然后,如何为这些选定项目中的每一个添加具有不同值的属性?例如,我想要这样:

所以我想能够说类似的话:

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

可能吗?

标签: gremlintinkerpop

解决方案


您可以使用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()运行仅在该版本中添加的生成密钥。

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


推荐阅读