gremlin> graph = TinkerGraph.open(); g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('group').property('name','Group A').property('permissionType', 4).as('ga').
......1> addV('group').property('name','Group B').property('permissionType', 29).as('gb').
......2> addV('person').property('name','Person A').property('age', 28).as('pa').
......3> addV('person').property('name','Person B').property('age', 29).as('pb').
......4> addV('person').property('name','Person C').property('age', 30).as('pc').
......5> addV('person').property('name','Person D').property('age', 28).as('pd').
......6> addV('person').property('name','Person E').property('age', 29).as('pe').
......7> addV('person').property('name','Person F').property('age', 30).as('pf').
......8> addE('contains').from('ga').to('pa').
......9> addE('contains').from('ga').to('pb').
.....10> addE('contains').from('ga').to('pc').
.....11> addE('contains').from('gb').to('pd').
.....12> addE('contains').from('gb').to('pe').
.....13> addE('contains').from('gb').to('pf').iterate()
gremlin> g.V().hasLabel('group').group().by(valueMap()).by(out('contains').valueMap().fold())
==>[[permissionType:[4],name:[Group A]]:[[name:[Person A],age:[28]],[name:[Person B],age:[29]],[name:[Person C],age:[30]]],[permissionType:[29],name:[Group B]]:[[name:[Person D],age:[28]],[name:[Person E],age:[29]],[name:[Person F],age:[30]]]]