SDK數(shù)據(jù)庫 Command·聚合操作符·算數(shù)操作符

2022-05-12 16:59 更新

AggregateCommand.abs(value: Expression<number>): Object

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

聚合操作符。返回一個數(shù)字的絕對值。

參數(shù)

value: Expression<number>

number

返回值

Object

API 說明

語法如下:

db.command.aggregate.abs(<number>)

abs 傳入的值除了數(shù)字常量外,也可以是任何最終解析成一個數(shù)字的表達(dá)式。

如果表達(dá)式解析為 null 或者指向一個不存在的字段,則 abs 的結(jié)果是 null。如果值解析為 NaN,則結(jié)果是 NaN。

示例代碼

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

{ _id: 1, start: 5, end: 8 }
{ _id: 2, start: 4, end: 4 }
{ _id: 3, start: 9, end: 7 }
{ _id: 4, start: 6, end: 7 }

··· 可以用如下方式求得各個記錄的 start 和 end 之間的絕對差異大?。?/p>

const $ = db.command.aggregate
db.collection('ratings').aggregate()
  .project({
    delta: $.abs($.subtract(['$start', '$end']))
  })
  .end()

返回結(jié)果如下:

{ "_id" : 1, "delta" : 3 }
{ "_id" : 2, "delta" : 0 }
{ "_id" : 3, "delta" : 2 }
{ "_id" : 4, "delta" : 1 }

AggregateCommand.add(value: Expression[]): Object

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

聚合操作符。將數(shù)字相加或?qū)?shù)字加在日期上。如果數(shù)組中的其中一個值是日期,那么其他值將被視為毫秒數(shù)加在該日期上。

參數(shù)

value: Expression[]

[<表達(dá)式1>, <表達(dá)式2>, ...]

返回值

Object

API 說明

語法如下:

db.command.aggregate.add([<表達(dá)式1>, <表達(dá)式2>, ...])

表達(dá)式可以是形如 $ + 指定字段,也可以是普通字符串。只要能夠被解析成字符串即可。

示例代碼

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

{ _id: 1, department: "x", sales: 5, engineer: 10, lastUpdate: ISODate("2019-05-01T00:00:00Z") }
{ _id: 2, department: "y", sales: 10, engineer: 20, lastUpdate: ISODate("2019-05-01T02:00:00Z") }
{ _id: 3, department: "z", sales: 20, engineer: 5, lastUpdate: ISODate("2019-05-02T03:00:00Z") }

數(shù)字求和

可以用如下方式求得各個記錄人數(shù)總數(shù):

const $ = db.command.aggregate
db.collection('staff').aggregate()
  .project({
    department: 1,
    total: $.add(['$sales', '$engineer'])
  })
  .end()

返回結(jié)果如下:

{ _id: 1, department: "x", total: 15 }
{ _id: 2, department: "y", total: 30 }
{ _id: 3, department: "z", total: 25 }

增加日期值

如下操作可以獲取各個記錄的 lastUpdate 加一個小時之后的值:

const $ = db.command.aggregate
db.collection('staff').aggregate()
  .project({
    department: 1,
    lastUpdate: $.add(['$lastUpdate', 60*60*1000])
  })
  .end()

返回結(jié)果如下:

{ _id: 1, department: "x", lastUpdate: ISODate("2019-05-01T01:00:00Z") }
{ _id: 2, department: "y", lastUpdate: ISODate("2019-05-01T03:00:00Z") }
{ _id: 3, department: "z", lastUpdate: ISODate("2019-05-02T04:00:00Z") }

AggregateCommand.ceil(value: Expression<number>): Object

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

聚合操作符。向上取整,返回大于或等于給定數(shù)字的最小整數(shù)。

參數(shù)

value: Expression<number>

number

返回值

Object

API 說明

語法如下:

db.command.aggregate.ceil(<number>)

<number> 可以是任意解析為數(shù)字的表達(dá)式。如果表達(dá)式解析為 null 或指向一個不存在的字段,則返回 null,如果解析為 NaN,則返回 NaN。

示例代碼

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

{ _id: 1, sales: 5.2 }
{ _id: 2, sales: 1.32 }
{ _id: 3, sales: -3.2 }

可以用如下方式取各個數(shù)字的向上取整值:

const $ = db.command.aggregate
db.collection('sales').aggregate()
  .project({
    sales: $.ceil('$sales')
  })
  .end()

返回結(jié)果如下:

{ _id: 1, sales: 6 }
{ _id: 2, sales: 2 }
{ _id: 3, sales: -3 }

AggregateCommand.divide(value: Expression[]): Object

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

聚合操作符。傳入被除數(shù)和除數(shù),求商。

參數(shù)

value: Expression[]

[<被除數(shù)表達(dá)式>, <除數(shù)表達(dá)式>]

返回值

Object

API 說明

語法如下:

db.command.aggregate.divide([<被除數(shù)表達(dá)式>, <除數(shù)表達(dá)式>])

表達(dá)式可以是任意解析為數(shù)字的表達(dá)式。

示例代碼

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

{ _id: 1, meters: 5300 }
{ _id: 2, meters: 64000 }
{ _id: 3, meters: 130 }

可以用如下方式取各個數(shù)字轉(zhuǎn)換為千米之后的值:

const $ = db.command.aggregate
db.collection('railroads').aggregate()
  .project({
    km: $.divide(['$meters', 1000])
  })
  .end()

返回結(jié)果如下:

{ _id: 1, km: 5.3 }
{ _id: 2, km: 64 }
{ _id: 3, km: 0.13 }

AggregateCommand.exp(value: Expression<number>): Object

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

聚合操作符。取 e(自然對數(shù)的底數(shù),歐拉數(shù)) 的 n 次方。

參數(shù)

value: Expression<number>

exponent

返回值

Object

API 說明

語法如下:

db.command.aggregate.exp(<exponent>)

<exponent> 可以是任意解析為數(shù)字的表達(dá)式。如果表達(dá)式解析為 null 或指向一個不存在的字段,則返回 null,如果解析為 NaN,則返回 NaN。

示例代碼

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

{ _id: 1, exp: 0 }
{ _id: 2, exp: 1 }
{ _id: 3, exp: 2 }
const $ = db.command.aggregate
db.collection('math').aggregate()
  .project({
    result: $.exp('$exp')
  })
  .end()

返回結(jié)果如下:

{ _id: 1, result: 1 }
{ _id: 2, result: 2.71828182845905 }
{ _id: 3, result: 7.38905609893065 }

AggregateCommand.floor(value: Expression<number>): Object

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

聚合操作符。向下取整,返回大于或等于給定數(shù)字的最小整數(shù)。

參數(shù)

value: Expression<number>

number

返回值

Object

API 說明

語法如下:

db.command.aggregate.floor(<number>)

<number> 可以是任意解析為數(shù)字的表達(dá)式。如果表達(dá)式解析為 null 或指向一個不存在的字段,則返回 null,如果解析為 NaN,則返回 NaN。

示例代碼

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

{ _id: 1, sales: 5.2 }
{ _id: 2, sales: 1.32 }
{ _id: 3, sales: -3.2 }

可以用如下方式取各個數(shù)字的向下取整值:

const $ = db.command.aggregate
db.collection('sales').aggregate()
  .project({
    sales: $.floor('$sales')
  })
  .end()

返回結(jié)果如下:

{ _id: 1, sales: 5 }
{ _id: 2, sales: 1 }
{ _id: 3, sales: -6 }

AggregateCommand.ln(value: Expression<number>): Object

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

聚合操作符。計算給定數(shù)字在自然對數(shù)值。

參數(shù)

value: Expression<number>

number

返回值

Object

API 說明

語法如下:

db.command.aggregate.ln(<number>)

<number> 可以是任意解析為非負(fù)數(shù)字的表達(dá)式。

ln 等價于 log([<number>, Math.E]),其中 Math.E 是 JavaScript 獲取 e 的值的方法。

示例代碼

db.command.aggregate.ln

聚合操作符。計算給定數(shù)字在自然對數(shù)值。

語法如下:

db.command.aggregate.ln(<number>)

<number> 可以是任意解析為非負(fù)數(shù)字的表達(dá)式。

ln 等價于 log([<number>, Math.E]),其中 Math.E 是 JavaScript 獲取 e 的值的方法。


AggregateCommand.log(value: Expression[]): Object

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

聚合操作符。計算給定數(shù)字在給定對數(shù)底下的 log 值。

參數(shù)

value: Expression[]

[<number>, <base>]

返回值

Object

API 說明

語法如下:

db.command.aggregate.log([<number>, <base>])

<number> 可以是任意解析為非負(fù)數(shù)字的表達(dá)式。<base> 可以是任意解析為大于 1 的數(shù)字的表達(dá)式。

如果任一參數(shù)解析為 null 或指向任意一個不存在的字段,log 返回 null。如果任一參數(shù)解析為 NaN,log 返回 NaN。

示例代碼

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

{ _id: 1, x: 1 }
{ _id: 2, x: 2 }
{ _id: 3, x: 3 }

計算 log2(x) 的值:

const $ = db.command.aggregate
db.collection('staff').aggregate()
  .project({
    log: $.log(['$x', 2])
  })
  .end()

返回結(jié)果如下:

{ _id: 1, log: 0 }
{ _id: 2, log: 1 }
{ _id: 3, log: 1.58496250072 }

AggregateCommand.log10(value: Expression<number>): Object

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

聚合操作符。計算給定數(shù)字在對數(shù)底為 10 下的 log 值。

參數(shù)

value: Expression<number>

number

返回值

Object

API 說明

語法如下:

db.command.aggregate.log(<number>)

<number> 可以是任意解析為非負(fù)數(shù)字的表達(dá)式。

log10 等同于 log 方法的第二個參數(shù)固定為 10。

示例代碼

db.command.aggregate.log10

聚合操作符。計算給定數(shù)字在對數(shù)底為 10 下的 log 值。

語法如下:

db.command.aggregate.log(<number>)

<number> 可以是任意解析為非負(fù)數(shù)字的表達(dá)式。

log10 等同于 log 方法的第二個參數(shù)固定為 10。


AggregateCommand.mod(value: Expression[]): Object

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

聚合操作符。取模運(yùn)算,取數(shù)字取模后的值。

參數(shù)

value: Expression[]

[<dividend>, <divisor>]

返回值

Object

API 說明

語法如下:

db.command.aggregate.mod([<dividend>, <divisor>])

第一個數(shù)字是被除數(shù),第二個數(shù)字是除數(shù)。參數(shù)可以是任意解析為數(shù)字的表達(dá)式。

示例代碼

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

{ _id: 1, bags: 3, items: 5 }
{ _id: 2, bags: 2, items: 8 }
{ _id: 3, bags: 5, items: 16 }

各記錄取 items 除以 bags 的余數(shù)(items % bags):

const $ = db.command.aggregate
db.collection('shopping').aggregate()
  .project({
    overflow: $.mod(['$items', '$bags'])
  })
  .end()

返回結(jié)果如下:

{ _id: 1, log: 2 }
{ _id: 2, log: 0 }
{ _id: 3, log: 1 }

AggregateCommand.multiply(value: Expression[]): Object

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

聚合操作符。取傳入的數(shù)字參數(shù)相乘的結(jié)果。

參數(shù)

value: Expression[]

[<expression1>, <expression2>, ...]

返回值

Object

API 說明

語法如下:

db.command.aggregate.multiply([<expression1>, <expression2>, ...])

參數(shù)可以是任意解析為數(shù)字的表達(dá)式。

示例代碼

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

{ "_id": 1, "name": "apple", "price": 10, "quantity": 100 }
{ "_id": 2, "name": "orange", "price": 15, "quantity": 50 }
{ "_id": 3, "name": "lemon", "price": 5, "quantity": 20 }

求各個水果的的總價值:

const $ = db.command.aggregate
db.collection('fruits').aggregate()
  .project({
    name: 1,
    total: $.multiply(['$price', '$quantity']),
  })
  .end()

返回結(jié)果如下:

{ "_id": 1, "name": "apple", "total": 1000 }
{ "_id": 2, "name": "orange", "total": 750 }
{ "_id": 3, "name": "lemo", "total": 100 }

AggregateCommand.pow(value: Expression[]): Object

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

聚合操作符。求給定基數(shù)的指數(shù)次冪。

參數(shù)

value: Expression[]

[<base>, <exponent>]

返回值

Object

API 說明

語法如下:

db.command.aggregate.pow([<base>, <exponent>])

參數(shù)可以是任意解析為數(shù)字的表達(dá)式。

示例代碼

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

{ "_id": 1, "x": 2, "y": 3 }
{ "_id": 2, "x": 5, "y": 7 }
{ "_id": 3, "x": 10, "y": 20 }

求 x 和 y 的平方和:

const $ = db.command.aggregate
db.collection('stats').aggregate()
  .project({
    sumOfSquares: $.add([$.pow(['$x', 2]), $.pow(['$y', 2])]),
  })
  .end()

返回結(jié)果如下:

{ "_id": 1, "sumOfSquares": 13 }
{ "_id": 2, "sumOfSquares": 74 }
{ "_id": 3, "sumOfSquares": 500 }

AggregateCommand.sqrt(value: Expression[]): Object

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

聚合操作符。求平方根。

參數(shù)

value: Expression[]

[<number>]

返回值

Object

API 說明

語法如下:

db.command.aggregate.sqrt([<number>])

參數(shù)可以是任意解析為非負(fù)數(shù)字的表達(dá)式。

示例代碼

假設(shè)直角三角形集合 triangle 有如下記錄:

{ "_id": 1, "x": 2, "y": 3 }
{ "_id": 2, "x": 5, "y": 7 }
{ "_id": 3, "x": 10, "y": 20 }

假設(shè) x 和 y 分別為兩直角邊,則求斜邊長:

const $ = db.command.aggregate
db.collection('triangle').aggregate()
  .project({
    len: $.sqrt([$.add([$.pow(['$x', 2]), $.pow(['$y', 2])])]),
  })
  .end()

返回結(jié)果如下:

{ "_id": 1, "len": 3.605551275463989 }
{ "_id": 2, "len": 8.602325267042627 }
{ "_id": 3, "len": 22.360679774997898 }

AggregateCommand.subtract(value: Expression[]): Object

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

聚合操作符。將兩個數(shù)字相減然后返回差值,或?qū)蓚€日期相減然后返回相差的毫秒數(shù),或?qū)⒁粋€日期減去一個數(shù)字返回結(jié)果的日期。

參數(shù)

value: Expression[]

[<expression1>, <expression2>]

返回值

Object

API 說明

語法如下:

db.command.aggregate.subtract([<expression1>, <expression2>])

參數(shù)可以是任意解析為數(shù)字或日期的表達(dá)式。

示例代碼

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

{ "_id": 1, "max": 10, "min": 1 }
{ "_id": 2, "max": 7, "min": 5 }
{ "_id": 3, "max": 6, "min": 6 }

求各個記錄的 max 和 min 的差值。:

const $ = db.command.aggregate
db.collection('scores').aggregate()
  .project({
    diff: $.subtract(['$max', '$min'])
  })
  .end()

返回結(jié)果如下:

{ "_id": 1, "diff": 9 }
{ "_id": 2, "diff": 2 }
{ "_id": 3, "diff": 0 }

AggregateCommand.trunc(value: Expression<number>): Object

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

聚合操作符。將數(shù)字截斷為整形。

參數(shù)

value: Expression<number>

number

返回值

Object

API 說明

語法如下:

db.command.aggregate.trunc(<number>)

參數(shù)可以是任意解析為數(shù)字的表達(dá)式。

示例代碼

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

{ "_id": 1, "value": 1.21 }
{ "_id": 2, "value": 3.83 }
{ "_id": 3, "value": -4.94 }
const $ = db.command.aggregate
db.collection('scores').aggregate()
  .project({
    int: $.trunc('$value')
  })
  .end()

返回結(jié)果如下:

{ "_id": 1, "value": 1 }
{ "_id": 2, "value": 3 }
{ "_id": 3, "value": -4 }


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號