数据分组和去重
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进行分组:
// 不指定任何维度
// 默认根据id进行分组,即重复的元素分到一组
g.V().hasLabel('person').group()
g.V().both().hasLabel('person').group()
指定分组键:
// 根据age属性进行分组
g.V().hasLabel('person').group().by('age')
分组并统计组内元素个数:
// 统计每个年龄的人数
g.V().hasLabel('person').group().by('age').by(count())
// 统计每个label下的顶点个数
g.V().group().by(label).by(count())
使用groupCount()
对结果集进行分组计数:
默认根据id进行分组:
// 不指定分组键
// 默认根据id进行分组
g.V().hasLabel('person').groupCount()
g.V().both().hasLabel('person').groupCount()
指定分组键:
// 根据年龄进行分组计数
g.V().hasLabel('person').groupCount().by('age')
使用dedup()
对结果集进行去重:
// 对结果集进行去重
g.V().both().hasLabel('person').dedup()
// 从各个年龄的人中选出一个代表
g.V().hasLabel('person').dedup().by('age')