Aggregate.bucketAuto(object: Object): Aggregate

    聚合阶段。将输入记录根据给定的条件划分成不同的组,每组即一个 。与 bucket 的其中一个不同之处在于无需指定 boundariesbucketAuto 会自动尝试将记录尽可能平均的分散到每组中。

    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 有如下记录:

    对上述记录进行自动分组,分成三组:

    返回结果如下: