SDK數(shù)據(jù)庫 Aggregate·劃分記錄

2022-05-12 16:46 更新

Aggregate.bucketAuto(object:Object): Aggregate

支持端:小程序 2.7.4, 云函數(shù) 0.8.1, Web

聚合階段。將輸入記錄根據(jù)給定的條件劃分成不同的組,每組即一個 bucket。與 bucket 的其中一個不同之處在于無需指定 boundaries,bucketAuto 會自動嘗試將記錄盡可能平均的分散到每組中。

參數(shù)

object: Object

返回值

Aggregate

API 說明

每組分別作為一個記錄輸出,包含一個以包含組中最大值和最小值兩個字段的對象為值的 _id 字段和一個以組中記錄數(shù)為值的 count 字段。count 在沒有指定 output 的時候是默認(rèn)輸出的。

bucketAuto 的形式如下:

bucketAuto({
  groupBy: <expression>,
  buckets: <number>,
  granularity: <string>,
  output: {
    <output1>: <accumulator expr>,
    ...
    <outputN>: <accumulator expr>
  }
})

groupBy 是一個用以決定分組的表達(dá)式,會應(yīng)用在各個輸入記錄上??梢杂?nbsp;$ 前綴加上要用以分組的字段路徑來作為表達(dá)式。除非用 default 指定了默認(rèn)值,否則每個記錄都需要包含指定的字段,且字段值必須在 boundaries 指定的范圍之內(nèi)。

buckets 是一個用于指定劃分組數(shù)的正整數(shù)。

granularity 是可選枚舉值字符串,用于保證自動計算出的邊界符合給定的規(guī)則。這個字段僅可在所有 groupBy 值都是數(shù)字并且沒有 NaN 的情況下使用。枚舉值包括:R5、R10、R20、R40、R80、1-2-5、E6、E12、E24、E48、E96、E192、POWERSOF2。

output 可選,用以決定輸出記錄除了 _id 外還要包含哪些字段,各個字段的值必須用累加器表達(dá)式指定。當(dāng) output 指定時,默認(rèn)的 count 是不會被默認(rèn)輸出的,必須手動指定:

output: {
  count: $.sum(1),
  ...
  <outputN>: <accumulator expr>
}

在以下情況中,輸出的分組可能會小于給定的組數(shù):

  • 輸入記錄數(shù)少于分組數(shù)
  • groupBy 計算得到的唯一值少于分組數(shù)
  • granularity 的間距少于分組數(shù)
  • granularity 不夠精細(xì)以至于不能平均分配到各組

granularity 詳細(xì)說明

granularity 用于保證邊界值屬于一個給定的數(shù)字序列。

Renard 序列

Renard 序列是以 10 的 5 / 10 / 20 / 40 / 80 次方根來推導(dǎo)的、在 1.0 到 10.0 (如果是 R80 則是 10.3) 之間的數(shù)字序列。

設(shè)置 granularity 為 R5 / R10 / R20 / R40 / R80 就把邊界值限定在序列內(nèi)。如果 groupBy 的值不在 1.0 到 10.0 (如果是 R80 則是 10.3) 內(nèi),則序列數(shù)字會自動乘以 10。

E 序列

E 序列是以 10 的 6 / 12 / 24 / 48 / 96 / 192 次方跟來推導(dǎo)的、帶有一個特定誤差的、在 1.0 到 10.0 之間的數(shù)字序列。

1-2-5 序列

1-2-5 序列 表現(xiàn)與三值 Renard 序列一樣。

2的次方序列

由 2 的各次方組成的序列數(shù)字。

示例

假設(shè)集合 items 有如下記錄:

{
  _id: "1",
  price: 10.5
}
{
  _id: "2",
  price: 50.3
}
{
  _id: "3",
  price: 20.8
}
{
  _id: "4",
  price: 80.2
}
{
  _id: "5",
  price: 200.3
}

對上述記錄進(jìn)行自動分組,分成三組:

const $ = db.command.aggregate
db.collection('items').aggregate()
  .bucket({
    groupBy: '$price',
    buckets: 3,
  })
  .end()

返回結(jié)果如下:

{
  "_id": {
    "min": 10.5,
    "max": 50.3
  },
  "count": 2
}
{
  "_id": {
    "min": 50.3,
    "max": 200.3
  },
  "count": 2
}
{
  "_id": {
    "min": 200.3,
    "max": 200.3
  },
  "count": 1
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號