Как собрать значения из вершины, используемой в обходе? - PullRequest
0 голосов
/ 08 июля 2019

Я хочу детали вершины вместе с деталями вершин, которые к ней присоединены.

У меня есть групповая вершина, входящие ребра 'member' в пользовательские вершины.Мне нужны детали вершин.

g.V(1).as('a').in('member').valueMap().as('b').select('a','b').unfold().dedup()

==>a=v[1]
==>b={image=[images/profile/friend9.jpg], name=[Thomas Thompson], email=[me@thomasthompson.co.uk]}
==>b={image=[images/profile/friend13.jpg], name=[Laura Tostevin], email=[me@lauratostevin.co.uk]}
==>b={image=[images/profile/friend5.jpg], name=[Alan Thompson], email=[me@alanthompson.co.uk]}
==>b={image=[images/profile/friend10.jpg], name=[Laura Bourne], email=[me@laurabourne.co.uk]}

В идеале я хотел бы получить:

{label: 'group', id=1, name='A Group', users=[{id=2, label="user",name=".."}, ... }]}

КогдаЯ попробовал project, мне не понравилось использовать 'in'

gremlin> g.V('1').project('name','users').by('name').by(in('member').select()) groovysh_parse: 1: unexpected token: in @ line 1, column 83. 'name','users').by('name').by(in('member

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Чтобы получить предпочитаемый формат вывода, вам нужно присоединиться к группе valueMap() со списком пользователей.На современном игрушечном графике TinkerPop вы бы сделали что-то вроде этого:

gremlin> g.V(3).union(valueMap(true).
                        by(unfold()), 
                      project('users').
                        by(__.in('created').
                           valueMap(true).
                             by(unfold()).
                           fold())).
                unfold().
                group().
                  by(keys).
                  by(select(values))
==>[name:lop,id:3,lang:java,label:software,users:[[id:1,label:person,name:marko,...],...]]

Отображение этого на ваш график должно быть довольно простым, в основном это просто смена меток.

1 голос
/ 08 июля 2019

Поскольку in является зарезервированным ключевым словом в Groovy, вы должны использовать подробный синтаксис __.in

try:

g.V('1').project('name','users').by('name').by(__.in('member').valueMap(true).fold())
...