Как обновить несколько свойств вершин в Gremlin? - PullRequest
4 голосов
/ 06 октября 2011

Я хочу добавить несколько свойств в вершину.Я мог бы сделать:

g.v(1).firstname='Marko'
g.v(1).lastname='Rodriguez'

Но как добавить эти свойства со следующим хешем {firstname: 'Marko', фамилия: 'Rodriguez'} в одном запросе?

1 Ответ

5 голосов
/ 07 октября 2011

Вы можете создать трубу SideEffect, которая будет работать. В простом случае сделайте это:

g.v(1)._().sideEffect{it.firstname='Marko'; it.lastname='Rodriguez'}

В качестве альтернативы, если вам нужно работать только с одним узлом и иметь карту, вы можете использовать метод each карты:

m = [firstname:'Marko', lastname:'Rodriguez']
m.each{g.v(1).setProperty(it.key, it.value)}

Или вы можете сделать это внутри канала, где у вас есть хеш со значениями, которые вы хотите установить. Еще раз, мы будем использовать трубу sideEffect. Поскольку внутри замыкания есть замыкание, нам нужно присвоить псевдониму значение it от первого замыкания к чему-то другому, в данном случае tn, сокращенно от «этого узла», поэтому оно доступно во втором замыкании. :

g = new TinkerGraph()
g.addVertex()
g.addVertex()
m = ['0': [firstname: 'Marko', lastname: 'Rodriguez'], '1': [firstname: 'William', lastname: 'Clinton']]
g.V.sideEffect{tn = it; m[tn.id].each{tn.setProperty(it.key, it.value)}}

Это даст следующее:

gremlin> g.v(0).map
==>lastname=Rodriguez
==>firstname=Marko
gremlin> g.v(1).map
==>lastname=Clinton
==>firstname=William

Один из возможных недостатков этого метода заключается в том, что вам нужно помнить, что идентификаторы вершин - это строки, а не целые числа, поэтому убедитесь, что их заключили в кавычки.

...