创新互联小程序教程:SDK数据库Aggregate·划分输入数据

Aggregate.bucket(object: Object): Aggregate

支持端:小程序 2.7.4, 云函数 0.8.1, Web

聚合阶段。将输入记录根据给定的条件和边界划分成不同的组,每组即一个 bucket。

参数

object: Object

返回值

Aggregate

API 说明

每组分别作为一个记录输出,包含一个以下界为值的 _id 字段和一个以组中记录数为值的 count 字段。count 在没有指定 output 的时候是默认输出的。

bucket 只会在组内有至少一个记录的时候输出。

bucket 的形式如下:

bucket({
  groupBy: ,
  boundaries: [, , ...],
  default: ,
  output: {
    : ,
    ...
    : 
  }
})

groupBy 是一个用以决定分组的表达式,会应用在各个输入记录上。可以用 $ 前缀加上要用以分组的字段路径来作为表达式。除非用 default 指定了默认值,否则每个记录都需要包含指定的字段,且字段值必须在 boundaries 指定的范围之内。

boundaries 是一个数组,每个元素分别是每组的下界。必须至少指定两个边界值。数组值必须是同类型递增的值。

default 可选,指定之后,没有进入任何分组的记录将都进入一个默认分组,这个分组记录的 _id 即由 default 决定。default 的值必须小于 boundaries 中的最小值或大于等于其中的最大值。default 的值可以与 boundaries 元素值类型不同。

output 可选,用以决定输出记录除了 _id 外还要包含哪些字段,各个字段的值必须用累加器表达式指定。当 output 指定时,默认的 count 是不会被默认输出的,必须手动指定:

output: {
  count: $.sum(1),
  ...
  : 
}

使用 bucket 需要满足以下至少一个条件,否则会抛出错误:

  • 每一个输入记录应用 groupBy 表达式获取的值都必须是一个在 boundaries 内的值
  • 指定一个 default 值,该值在 boundaries 以外,或与 boundaries 元素的值不同的类型。

示例

假设集合 items 有如下记录:

{
  _id: "1",
  price: 10
}
{
  _id: "2",
  price: 50
}
{
  _id: "3",
  price: 20
}
{
  _id: "4",
  price: 80
}
{
  _id: "5",
  price: 200
}

对上述记录进行分组,将 [0, 50) 分为一组,[50, 100) 分为一组,其他分为一组:

const $ = db.command.aggregate
db.collection('items').aggregate()
  .bucket({
    groupBy: '$price',
    boundaries: [0, 50, 100],
    default: 'other',
    output: {
      count: $.sum(1),
      ids: $.push('$_id')
    }
  })
  .end()

返回结果如下:

[
  {
    "_id": 0,
    "count": 2,
    "ids": [
      "1",
      "3"
    ]
  },
  {
    "_id": 50,
    "count": 2,
    "ids": [
      "2",
      "4"
    ]
  },
  {
    "_id": "other",
    "count": 22,
    "ids": [
      "5"
    ]
  }
]

当前名称:创新互联小程序教程:SDK数据库Aggregate·划分输入数据
地址分享:http://www.mswzjz.cn/qtweb/news23/441073.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能