codecamp

SDK数据库 Command·聚合操作符·算数操作符

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

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

聚合操作符。返回一个数字的绝对值。

参数

value: Expression<number>

number

返回值

Object

API 说明

语法如下:

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

abs 传入的值除了数字常量外,也可以是任何最终解析成一个数字的表达式。

如果表达式解析为 null 或者指向一个不存在的字段,则 abs 的结果是 null。如果值解析为 NaN,则结果是 NaN。

示例代码

假设集合 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 之间的绝对差异大小:

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

返回结果如下:

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

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

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

聚合操作符。将数字相加或将数字加在日期上。如果数组中的其中一个值是日期,那么其他值将被视为毫秒数加在该日期上。

参数

value: Expression[]

[<表达式1>, <表达式2>, ...]

返回值

Object

API 说明

语法如下:

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

表达式可以是形如 $ + 指定字段,也可以是普通字符串。只要能够被解析成字符串即可。

示例代码

假设集合 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") }

数字求和

可以用如下方式求得各个记录人数总数:

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

返回结果如下:

{ _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()

返回结果如下:

{ _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, 云函数 0.8.1, Web

聚合操作符。向上取整,返回大于或等于给定数字的最小整数。

参数

value: Expression<number>

number

返回值

Object

API 说明

语法如下:

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

<number> 可以是任意解析为数字的表达式。如果表达式解析为 null 或指向一个不存在的字段,则返回 null,如果解析为 NaN,则返回 NaN。

示例代码

假设集合 sales 有如下记录:

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

可以用如下方式取各个数字的向上取整值:

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

返回结果如下:

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

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

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

聚合操作符。传入被除数和除数,求商。

参数

value: Expression[]

[<被除数表达式>, <除数表达式>]

返回值

Object

API 说明

语法如下:

db.command.aggregate.divide([<被除数表达式>, <除数表达式>])

表达式可以是任意解析为数字的表达式。

示例代码

假设集合 railroads 有如下记录:

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

可以用如下方式取各个数字转换为千米之后的值:

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

返回结果如下:

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

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

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

聚合操作符。取 e(自然对数的底数,欧拉数) 的 n 次方。

参数

value: Expression<number>

exponent

返回值

Object

API 说明

语法如下:

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

<exponent> 可以是任意解析为数字的表达式。如果表达式解析为 null 或指向一个不存在的字段,则返回 null,如果解析为 NaN,则返回 NaN。

示例代码

假设集合 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()

返回结果如下:

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

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

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

聚合操作符。向下取整,返回大于或等于给定数字的最小整数。

参数

value: Expression<number>

number

返回值

Object

API 说明

语法如下:

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

<number> 可以是任意解析为数字的表达式。如果表达式解析为 null 或指向一个不存在的字段,则返回 null,如果解析为 NaN,则返回 NaN。

示例代码

假设集合 sales 有如下记录:

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

可以用如下方式取各个数字的向下取整值:

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

返回结果如下:

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

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

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

聚合操作符。计算给定数字在自然对数值。

参数

value: Expression<number>

number

返回值

Object

API 说明

语法如下:

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

<number> 可以是任意解析为非负数字的表达式。

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

示例代码

db.command.aggregate.ln

聚合操作符。计算给定数字在自然对数值。

语法如下:

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

<number> 可以是任意解析为非负数字的表达式。

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


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

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

聚合操作符。计算给定数字在给定对数底下的 log 值。

参数

value: Expression[]

[<number>, <base>]

返回值

Object

API 说明

语法如下:

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

<number> 可以是任意解析为非负数字的表达式。<base> 可以是任意解析为大于 1 的数字的表达式。

如果任一参数解析为 null 或指向任意一个不存在的字段,log 返回 null。如果任一参数解析为 NaN,log 返回 NaN。

示例代码

假设集合 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()

返回结果如下:

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

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

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

聚合操作符。计算给定数字在对数底为 10 下的 log 值。

参数

value: Expression<number>

number

返回值

Object

API 说明

语法如下:

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

<number> 可以是任意解析为非负数字的表达式。

log10 等同于 log 方法的第二个参数固定为 10。

示例代码

db.command.aggregate.log10

聚合操作符。计算给定数字在对数底为 10 下的 log 值。

语法如下:

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

<number> 可以是任意解析为非负数字的表达式。

log10 等同于 log 方法的第二个参数固定为 10。


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

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

聚合操作符。取模运算,取数字取模后的值。

参数

value: Expression[]

[<dividend>, <divisor>]

返回值

Object

API 说明

语法如下:

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

第一个数字是被除数,第二个数字是除数。参数可以是任意解析为数字的表达式。

示例代码

假设集合 shopping 有如下记录:

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

各记录取 items 除以 bags 的余数(items % bags):

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

返回结果如下:

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

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

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

聚合操作符。取传入的数字参数相乘的结果。

参数

value: Expression[]

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

返回值

Object

API 说明

语法如下:

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

参数可以是任意解析为数字的表达式。

示例代码

假设集合 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()

返回结果如下:

{ "_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, 云函数 0.8.1, Web

聚合操作符。求给定基数的指数次幂。

参数

value: Expression[]

[<base>, <exponent>]

返回值

Object

API 说明

语法如下:

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

参数可以是任意解析为数字的表达式。

示例代码

假设集合 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()

返回结果如下:

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

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

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

聚合操作符。求平方根。

参数

value: Expression[]

[<number>]

返回值

Object

API 说明

语法如下:

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

参数可以是任意解析为非负数字的表达式。

示例代码

假设直角三角形集合 triangle 有如下记录:

{ "_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('triangle').aggregate()
  .project({
    len: $.sqrt([$.add([$.pow(['$x', 2]), $.pow(['$y', 2])])]),
  })
  .end()

返回结果如下:

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

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

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

聚合操作符。将两个数字相减然后返回差值,或将两个日期相减然后返回相差的毫秒数,或将一个日期减去一个数字返回结果的日期。

参数

value: Expression[]

[<expression1>, <expression2>]

返回值

Object

API 说明

语法如下:

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

参数可以是任意解析为数字或日期的表达式。

示例代码

假设集合 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()

返回结果如下:

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

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

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

聚合操作符。将数字截断为整形。

参数

value: Expression<number>

number

返回值

Object

API 说明

语法如下:

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

参数可以是任意解析为数字的表达式。

示例代码

假设集合 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()

返回结果如下:

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


SDK数据库 Command·聚合操作符·聚合表达式
SDK数据库 Command·聚合操作符·数组操作符
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

微信小程序 指南

目录结构

开放能力

微信小程序 调试

微信小程序 实时日志

微信小程序 小程序测速

微信小程序 基础组件

微信小程序 API

媒体

界面

微信小程序API 绘图

微信小程序 服务端

接口调用凭证

统一服务消息

微信小程序 服务市场

微信小程序 生物认证

微信小程序 云开发

服务端

微信小程序云开发服务端API 数据库

SDK文档

微信小程序 扩展能力

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }