2017-02-21 28 views
1

Использование оболочки Titan 1.0.0 Gremlin Я могу получить одно значение свойства из края из замыкания. Но попытка получить доступ к valueMap() завершается с ошибкой.Получение значения одного свойства в закрытии запроса Gremlin работает, но получение значенияMap() не дает выход Исключение

работы:

gremlin> t.E().hasLabel("TRUSTS").has('NOT_VALID_BEFORE').each({ trustEdge -> t.E().has('EDGE_GROUP_ID', trustEdge.value('EDGE_GROUP_ID')).hasNot('NOT_VALID_BEFORE').each({println it.value('EDGE_ID')}) }) 

Урожайность исключение (разница только в правом большинстве закрытия 'it.valueMap()' против 'it.value (' .. ')'):

gremlin> t.E().hasLabel("TRUSTS").has('NOT_VALID_BEFORE').each({ trustEdge -> t.E().has('EDGE_GROUP_ID', trustEdge.value('EDGE_GROUP_ID')).hasNot('NOT_VALID_BEFORE').each({ println it.valueMap() }) }) 
No signature of method: com.thinkaurelius.titan.graphdb.relations.StandardEdge.valueMap() is applicable for argument types:() values: [] 
Possible solutions: value(java.lang.String) 
Display stack trace? [yN] 
gremlin> 

Но это не то, что в целом я бы не смог добраться до valueMap края:

gremlin> t.E().hasLabel("TRUSTS").has('NOT_VALID_BEFORE').each({ trustEdge -> t.E().has('EDGE_GROUP_ID', trustEdge.value('EDGE_GROUP_ID')).hasNot('NOT_VALID_BEFORE').each({ println it }) }) 
e[215rmh-oe094-1d05-9i0][40964296-MANAGED->12312] 
gremlin> t.E('215rmh-oe094-1d05-9i0').valueMap() 
==>[MANAGE_INFORM:false, NOT_VALID_AFTER:1669873006000, MANAGE_MANAGERS:false, MANAGE_AUTHENTICATION_MEANS:true, CREATED_AT:1487683094863, RELATIONSHIP_ROLE:FAMILY_DOCTOR, MANAGE_TRUST:true, UPDATED_AT:1487683094915, MANAGE_REPRESENTATION:false, EDGE_ID:122881049, VERIFIED:true, EDGE_GROUP_ID:122881049] 

является ли это ошибка или я делаю SOMET здесь неправильно?

Небольшой контекст, на всякий случай, если запрос даже не делает то, что я думаю: Что я думаю, что я делаю здесь, это поиск всех краев с меткой «TRUSTS», которые имеют свойство NOT_VALID_BEFORE. Для каждого из этих ребер я просматриваю все ребра, которые используют одно и то же значение ID группы, и проверяют, есть ли у них свойство NOT_VALID_BEFORE, распечатывая их на консоли, у которой нет набора свойств.

ответ

2

При запуске переборе с each(), каждый элемент можно манипулировать внутри закрытия находится «от обхода» - то есть, вы работаете с Edge объект, а не GraphTraversal объекта.

Edge имеет метод value(), аналогичный GraphTraversal, но у него нет метода valueMap(). Вместо этого вы можете использовать ElementHelper.propertyValueMap().

Вот краткий пример:

gremlin> g = TinkerFactory.createModern().traversal() 
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard] 
gremlin> g.E().valueMap() 
==>[weight:0.5] 
==>[weight:1.0] 
==>[weight:0.4] 
==>[weight:1.0] 
==>[weight:0.4] 
==>[weight:0.2] 
gremlin> g.E().each{ edge -> println ElementHelper.propertyValueMap(edge) };[] 
[weight:0.5] 
[weight:1.0] 
[weight:0.4] 
[weight:1.0] 
[weight:0.4] 
[weight:0.2]