Aggregate.bucketAuto(object: Object): Aggregate
聚合阶段。将输入记录根据给定的条件划分成不同的组,每组即一个 。与 的其中一个不同之处在于无需指定 boundaries
,bucketAuto
会自动尝试将记录尽可能平均的分散到每组中。
Aggregate
每组分别作为一个记录输出,包含一个以包含组中最大值和最小值两个字段的对象为值的 _id
字段和一个以组中记录数为值的 count
字段。count
在没有指定 output
的时候是默认输出的。
bucketAuto
的形式如下:
groupBy
是一个用以决定分组的表达式,会应用在各个输入记录上。可以用 $
前缀加上要用以分组的字段路径来作为表达式。除非用 default
指定了默认值,否则每个记录都需要包含指定的字段,且字段值必须在 boundaries
指定的范围之内。
是一个用于指定划分组数的正整数。
output
可选,用以决定输出记录除了 _id
外还要包含哪些字段,各个字段的值必须用累加器表达式指定。当 output
指定时,默认的 count
是不会被默认输出的,必须手动指定:
在以下情况中,输出的分组可能会小于给定的组数:
- 输入记录数少于分组数
groupBy
计算得到的唯一值少于分组数granularity
的间距少于分组数
granularity 详细说明
granularity
用于保证边界值属于一个给定的数字序列。
Renard 序列
是以 10 的 5 / 10 / 20 / 40 / 80 次方根来推导的、在 1.0 到 10.0 (如果是 R80 则是 10.3) 之间的数字序列。
设置 granularity
为 R5 / R10 / R20 / R40 / R80 就把边界值限定在序列内。如果 的值不在 1.0 到 10.0 (如果是 R80 则是 10.3) 内,则序列数字会自动乘以 10。
E 序列
1-2-5 序列
1-2-5 序列 表现与三值 Renard 序列一样。
2的次方序列
由 2 的各次方组成的序列数字。
假设集合 items
有如下记录:
对上述记录进行自动分组,分成三组:
返回结果如下: