Как обновить несколько свойств вершин в Gremlin?

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

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

Но как добавить эти свойства со следующим хэшем {имя: «Марко», фамилия: «Родригес»} в одном запросе?


person JMaylin    schedule 06.10.2011    source источник


Ответы (1)


Вы можете построить канал 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

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

person Pridkett    schedule 07.10.2011
comment
Спасибо, Придкетт, я проверю это как можно скорее. Но я думал, что есть более простое решение. - person JMaylin; 10.10.2011