Вот один из способов сделать это на примере "современного" игрушечного графа:
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().outE('knows').as('e').
inV().as('v').
select('e','v').by('weight').by(valueMap())
==>[e:0.5,v:[name:[vadas],age:[27]]]
==>[e:1.0,v:[name:[josh],age:[32]]]
Итак, вместо того, чтобы получать «addedOn» из ребра «нравится» и свойств вершины «элемент», я хочу получить «вес» из ребра «знает» и свойства вершины «человек». В первой строке мы проходим по "известному" ребру и помечаем его как 'e', затем мы переходим к соседней вершине in
person и маркируем ее как 'v'. Наконец, мы выбираем значения этих двух меток и применяем к ним by
преобразования. by
применяются циклически, так что первый by
применяется к 'e', а второй - к 'v'.
Использование valueMap
немного удобно, но обычно вы будете знать данные, которые вы хотите получить из вершины, точно так же, как вы знали данные, которые вы извлекаете из края (то есть «вес»). Чтобы получить более приятный результат без всех встроенных Map
, вы могли бы сделать:
gremlin> g.V().outE('knows').as('w').
inV().as('a','n').
select('w','a','n').
by('weight').by('age').by('name')
==>[w:0.5,a:27,n:vadas]
==>[w:1.0,a:32,n:josh]
person
stephen mallette
schedule
30.01.2017