如何从遍历中使用的顶点收集值?

时间:2019-07-08 12:38:56

标签: gremlin

我想要一个顶点的细节以及与之相连的顶点的细节。

我有一个组顶点,用户顶点有传入的“成员”边。我想要顶点的细节。

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 个答案:

答案 0 :(得分:1)

由于in是Groovy中的保留关键字,因此必须使用详细语法__.in

尝试:

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

答案 1 :(得分:1)

要获取首选的输出格式,必须将组的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,...],...]]

将其映射到图形应该很简单,基本上就是更改标签。