为多个顶点

时间:2018-05-22 07:29:04

标签: gremlin tinkerpop

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

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

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

  • Vertex 1具有属性' x'有价值的' a'
  • Vertex 2具有属性' x'有价值的' b'
  • Vertex 3具有属性' x'有价值的' c'

所以我希望能说出类似的话:

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

有可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用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的键来处理没有lambda的顶点的查找(也许我不会想到一些简单的东西),所以不幸的是你有要指定两次ID,但您可以非常轻松地对其进行参数化,因为您只需要构建Map,然后从中抓取.keys()以提供给V()