数据分组和去重

Gremlin支持对数据进行分组和去重。

数据分组:从某个维度上对拥有相同点的数据进行分组,比如根据年龄分组、根据省市区分组等

数据去重:去除结果集中相同的元素,或者去除在某个维度上具有相同点的数据,比如根据每个年龄只显示一个人

需要用到的Step:

  • group():对结果集进行分组,可通过by(property)来指定根据什么维度进行分组,可称维度为分组键;如果不指定维度则以元素id作为分组键,相当于重复的元素被分为一组。每一组由分组键 + 组内元素列表构成。如果有需要也可以对每一组的元素列表进行reduce操作,依然使用by()语句,比如by(count())对组内元素计数
  • groupCount():对结果集进行分组,并统计每一组的元素个数。每一组由分组键 + 组内元素数量构成
  • dedup():去除结果集中相同的元素,可通过by(property)来指定根据什么维度进行去重
  • by():语义上一般指“根据什么维度”,与上述语句配合使用,如group().by()dedup().by()等,也可以与其他语句配合,如order().by()path().by()

使用group()对结果集进行分组:

默认根据id进行分组:

  1. // 不指定任何维度
  2. // 默认根据id进行分组,即重复的元素分到一组
  3. g.V().hasLabel('person').group()
  4. g.V().both().hasLabel('person').group()

指定分组键:

  1. // 根据age属性进行分组
  2. g.V().hasLabel('person').group().by('age')

分组并统计组内元素个数:

  1. // 统计每个年龄的人数
  2. g.V().hasLabel('person').group().by('age').by(count())
  3. // 统计每个label下的顶点个数
  4. g.V().group().by(label).by(count())

使用groupCount()对结果集进行分组计数:

默认根据id进行分组:

  1. // 不指定分组键
  2. // 默认根据id进行分组
  3. g.V().hasLabel('person').groupCount()
  4. g.V().both().hasLabel('person').groupCount()

指定分组键:

  1. // 根据年龄进行分组计数
  2. g.V().hasLabel('person').groupCount().by('age')

使用dedup()对结果集进行去重:

  1. // 对结果集进行去重
  2. g.V().both().hasLabel('person').dedup()
  3. // 从各个年龄的人中选出一个代表
  4. g.V().hasLabel('person').dedup().by('age')