Добавить разные значения для каждой из нескольких вершин - PullRequest
0 голосов
/ 22 мая 2018

Я знаю, что могу выбрать несколько отдельных вершин по идентификатору за один шаг, например (с использованием синтаксиса gremlin-python):

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

Как я могу добавить свойство с разными значениями к каждомуиз этих выбранных предметов?Например, мне бы хотелось, чтобы:

  • У вершины 1 было свойство 'x' со значением 'a'
  • У вершины 2 есть свойство 'x' со значением 'b'
  • Вершина 3 имеет свойство 'x' со значением 'c'

Так что я хотел бы иметь возможность сказать что-то вроде:

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

Возможно ли это?

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать 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«для обработки поиска вершины без лямбды (может быть, я не думаю о чем-то простом), поэтому, к сожалению, вам придется указывать идентификаторы дважды, но вы можете довольно легко параметризовать это, потому что вам просто нужно создать Mapи затем возьмите .keys() из него, чтобы дать V().

...