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倾向于不推荐这种方法,因为它会降低代码的可移植性