Gremlin 如何按特性列表内容对顶点进行分组

Gremlin 如何按特性列表内容对顶点进行分组,gremlin,Gremlin,在我的图中,我的顶点包含一个具有列表基数的属性。我想根据列表的内容对这些顶点进行分组 在此示例图中: graph = TinkerGraph.open() g = graph.traversal() g.addV(). property('name', 'v1'). property(list, 'label', 'A'). property(list, 'label', 'B') g.addV(). property('name', 'v2'). property(list

在我的图中,我的顶点包含一个具有列表基数的属性。我想根据列表的内容对这些顶点进行分组

在此示例图中:

graph = TinkerGraph.open()
g = graph.traversal()
g.addV().
  property('name', 'v1').
  property(list, 'label', 'A').
  property(list, 'label', 'B')
g.addV().
  property('name', 'v2').
  property(list, 'label', 'B').
  property(list, 'label', 'C')
我试过这个问题

g.V().group().by(properties('label')).by('name').unfold()
==>vp[label->A]=[v1]
==>vp[label->B]=[v2]

但这正是我所期望的:A=[v1],B=[v1,v2],C=[v2]

有更好的方法可以做到这一点,但这里有一个选项:

gremlin> g.V().as('a').properties('label').
......1>   group().
......2>     by(value()).
......3>     by(select('a').by('name').fold()).
......4>   unfold()
==>A=[v1]
==>B=[v1, v2]
==>C=[v2]
我认为您需要将所有属性迭代到组中,但问题是无法通过Gremlin将父顶点引用到该属性。搭配lambda看起来更漂亮:

gremlin> g.V().properties('label').group().by(value()).by({it.element().value('name')}).unfold()
==>A=[v1]
==>B=[v1, v2]
==>C=[v2]
但TinkerPop倾向于不推荐这种方法,因为它会降低代码的可移植性