微信小程序开发文档 第5页
AggregateCommand.concat(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。连接字符串,返回拼接后的字符串。 参数 value: Expression[] [<表达式1>, <表达式2>, …] 返回值 Object API 说明 concat 的语法如下: db.command.aggregate.concat([<表达式1>, <表达式2>, ...]) 表达式可以是形如 $ + 指定字段,也可以是普通字符串。只要能够被解析成字符串即可。 示例代码 假设集合 students 的记录如下: { "firstName": "Yuanxin", "group": "a", "lastName": "Dong", "score": 84 } { "firstName": "Weijia", "group": "a", "lastName": "Wang", "score": 96 } { "firstName": "Chengxi", "group": "b", "lastName": "Li", "score": 80 } 借助 concat 可以拼接 lastName 和 firstName 字段,得到每位学生的名字全称: const $ = db.command.aggregate db .collection('students') .aggregate() .project({ _id: 0, fullName: $.concat(['$firstName', ' ', '$lastName']) }) .end() 返回的结果如下: { "fullName": "Yuanxin Dong" } { "fullName": "Weijia Wang" } { "fullName": "Chengxi Li" } AggregateCommand.dateFromString(value: any): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。将一个日期/时间字符串转换为日期对象 参数 value: any 返回值 Object API 说明 语法如下: db.command.aggregate.dateFromString({ dateString: <dateStringExpression>, timezone: <tzExpression> }) 示例代码 const $ = db.command.aggregate db .collection('dates') .aggregate() .project({ _id: 0,...
AggregateCommand.allElementsTrue(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。输入一个数组,或者数组字段的表达式。如果数组中所有元素均为真值,那么返回 true,否则返回 false。空数组永远返回 true。 参数 value: Expression[] [<expression>] 返回值 Object API 说明 语法如下: allElementsTrue([<expression>]) 示例代码 假设集合 test 有如下记录: { "_id": 1, "array": [ true ] } { "_id": 2, "array": [ ] } { "_id": 3, "array": [ false ] } { "_id": 4, "array": [ true, false ] } { "_id": 5, "array": [ 0 ] } { "_id": 6, "array": [ "stark" ] } 下面的代码使用 allElementsTrue(),判断 array 字段中是否均为真值: const $ = db.command.aggregate db.collection('price') .aggregate() .project({ isAllTrue: $.allElementsTrue(['$array']) }) .end() 返回结果如下: { "_id": 1, "isAllTrue": true } { "_id": 2, "isAllTrue": true } { "_id": 3, "isAllTrue": false } { "_id": 4, "isAllTrue": false } { "_id": 5, "isAllTrue": false } { "_id": 6, "isAllTrue": true } AggregateCommand.anyElementTrue(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。输入一个数组,或者数组字段的表达式。如果数组中任意一个元素为真值,那么返回 true,否则返回 false。空数组永远返回 false。...
AggregateCommand.mergeObjects(value: Expression<document>): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。将多个文档合并为单个文档。 参数 value: Expression<document> Document 表达式 返回值 Object API 说明 使用形式如下: 在 group() 中使用时: mergeObjects(<document>) 在其它表达式中使用时: mergeObjects([<document1>, <document2>, ...]) 示例代码 搭配 group() 使用 假设集合 sales 存在以下文档: { "_id": 1, "year": 2018, "name": "A", "volume": { "2018Q1": 500, "2018Q2": 500 } } { "_id": 2, "year": 2017, "name": "A", "volume": { "2017Q1": 400, "2017Q2": 300, "2017Q3": 0, "2017Q4": 0 } } { "_id": 3, "year": 2018, "name": "B", "volume": { "2018Q1": 100 } } { "_id": 4, "year": 2017, "name": "B", "volume": { "2017Q3": 100, "2017Q4": 250 } } 下面的代码使用 mergeObjects(),将用相同 name 的文档合并: const $ = db.command.aggregate db.collection('sales').aggregate() .group({ _id: '$name', mergedVolume: $.mergeObjects('$volume') }) .end() 输出如下: { "_id": "A", "mergedVolume": { "2017Q1": 400, "2017Q2": 300, "2017Q3": 0, "2017Q4": 0, "2018Q1": 500, "2018Q2": 500 } } {...
AggregateCommand.literal(value: any): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。直接返回一个值的字面量,不经过任何解析和处理。 参数 value: any 返回值 Object API 说明 literal 使用形式如下: literal(<值>) 如果 <值> 是一个表达式,那么 literal 不会解析或者计算这个表达式,而是直接返回这个表达式。 示例代码 比如我们有一个 items 集合,其中数据如下: { "_id": "0", "price": "$1" } { "_id": "1", "price": "$5.60" } { "_id": "2", "price": "$8.90" } 以字面量的形式使用 $ 下面的代码使用 literal,生成了一个新的字段 isOneDollar,表示 price 字段是否严格等于 “$1″。 注意:我们这里无法使用 eq([‘$price’, ‘$1’]),因为 “$1” 是一个表达式,代表 “1” 字段对应的值,而不是字符串字面量 “$1″。 const $ = db.command.aggregate db.collection('items').aggregate() .project({ isOneDollar: $.eq(['$price', $.literal('$1')]) }) .end() 输出如下: { "_id": "0", "isOneDollar": true } { "_id": "1", "isOneDollar": false } { "_id": "2", "isOneDollar": false } 投影一个字段,对应的值为 1 下面的代码使用 literal,投影了一个新的字段 amount,其值为 1。 const $ = db.command.aggregate db.collection('items').aggregate() .project({ price: 1, amount: $.literal(1) }) .end() 输出如下: { "_id": "0", "price": "$1", "amount": 1 } { "_id": "1", "price": "$5.60", "amount": 1 } { "_id": "2", "price": "$8.90", "amount": 1 }
AggregateCommand.dateFromParts(value: any): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。给定日期的相关信息,构建并返回一个日期对象。 参数 value: any 返回值 Object API 说明 语法如下: db.command.aggregate.dateFromParts({ year: <year>, month: <month>, day: <day>, hour: <hour>, minute: <minute>, second: <second>, millisecond: <ms>, timezone: <tzExpression> }) 你也可以使用 ISO 8601 的标准: db.command.aggregate.dateFromParts({ isoWeekYear: <year>, isoWeek: <week>, isoDayOfWeek: <day>, hour: <hour>, minute: <minute>, second: <second>, millisecond: <ms>, timezone: <tzExpression> }) 示例代码 const $ = db.command.aggregate db .collection('dates') .aggregate() .project({ _id: 0, date: $.dateFromParts({ year: 2017, month: 2, day: 8, hour: 12, timezone: 'America/New_York' }), }) .end() 输出如下: { "date": ISODate("2017-02-08T17:00:00.000Z") } AggregateCommand.dateFromString(value: any): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。将一个日期/时间字符串转换为日期对象 参数 value: any 返回值 Object API 说明 语法如下: db.command.aggregate.dateFromString({ dateString: <dateStringExpression>, timezone: <tzExpression> }) 示例代码 const $ = db.command.aggregate db .collection('dates') .aggregate() .project({ _id: 0, date: $.dateFromString({...
AggregateCommand.cond(value: any): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。计算布尔表达式,返回指定的两个值其中之一。 参数 value: any 返回值 Object API 说明 cond 的使用形式如下: cond({ if: <布尔表达式>, then: <真值>, else: <假值> }) 或者: cond([ <布尔表达式>, <真值>, <假值> ]) 两种形式中,三个参数(if、then、else)都是必须的。 如果布尔表达式为真,那么 $cond 将会返回 <真值>,否则会返回 <假值> 示例代码 假设集合 items 的记录如下: { "_id": "0", "name": "item-a", "amount": 100 } { "_id": "1", "name": "item-b", "amount": 200 } { "_id": "2", "name": "item-c", "amount": 300 } 我们可以使用 cond,根据 amount 字段,来生成新的字段 discount: const $ = db.command.aggregate db.collection('items').aggregate() .project({ name: 1, discount: $.cond({ if: $.gte(['$amount', 200]), then: 0.7, else: 0.9 }) }) .end() 输出如下: { "_id": "0", "name": "item-a", "discount": 0.9 } { "_id": "1", "name": "item-b", "discount": 0.7 } { "_id": "2", "name": "item-c", "discount": 0.7 } AggregateCommand.ifNull(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。计算给定的表达式,如果表达式结果为 null、undefined 或者不存在,那么返回一个替代值;否则返回原值。 参数 value: Expression[] [ <表达式>, <替代值> ] 返回值 Object API...
AggregateCommand.cmp(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。给定两个值,返回其比较值: 参数 value: Expression[] [<expression1>, <expression2>] 返回值 Object API 说明 如果第一个值小于第二个值,返回 -1 如果第一个值大于第二个值,返回 1 如果两个值相等,返回 0 语法如下: db.command.aggregate.cmp([<expression1>, <expression2>]) 示例代码 假设集合 price 有如下记录: { "_id": 1, "shop1": 10, "shop2": 100 } { "_id": 2, "shop1": 80, "shop2": 20 } { "_id": 3, "shop1": 50, "shop2": 50 } 求 shop1 和 shop2 的各个物品的价格对比。 const $ = db.command.aggregate db.collection('price').aggregate() .project({ compare: $.cmp(['$shop1', '$shop2'])) }) .end() 返回结果如下: { "_id": 1, "compare": -1 } { "_id": 2, "compare": 1 } { "_id": 3, "compare": 0 } AggregateCommand.eq(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。匹配两个值,如果相等则返回 true,否则返回 false。 参数 value: Expression[] [<value1>, <value2>] 返回值 Object API 说明 语法如下: db.command.aggregate.eq([<value1>, <value2>]) 示例代码 假设集合 price 有如下记录: { "_id": 1, "value": 10 } { "_id": 2, "value": 80 } { "_id": 3, "value": 50 } 求 value 等于 50 的记录。...
AggregateCommand.and(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。给定多个表达式,and 仅在所有表达式都返回 true 时返回 true,否则返回 false。 参数 value: Expression[] [<expression1>, <expression2>, …] 返回值 Object API 说明 语法如下: db.command.aggregate.and([<expression1>, <expression2>, ...]) 如果表达式返回 false、null、0、或 undefined,表达式会解析为 false,否则对其他返回值都认为是 true。 示例代码 假设集合 price 有如下记录: { "_id": 1, "min": 10, "max": 100 } { "_id": 2, "min": 60, "max": 80 } { "_id": 3, "min": 30, "max": 50 } 求 min 大于等于 30 且 max 小于等于 80 的记录。 const $ = db.command.aggregate db.collection('price').aggregate() .project({ fullfilled: $.and([$.gte(['$min', 30]), $.lte(['$max', 80])]) }) .end() 返回结果如下: { "_id": 1, "fullfilled": false } { "_id": 2, "fullfilled": true } { "_id": 3, "fullfilled": true } AggregateCommand.not(value: Expression): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。给定一个表达式,如果表达式返回 true,则 not 返回 false,否则返回 true。注意表达式不能为逻辑表达式(and、or、nor、not)。 参数 value: Expression 表达式 返回值 Object API 说明 语法如下: db.command.aggregate.not(<expression>) 如果表达式返回 false、null、0、或 undefined,表达式会解析为 false,否则对其他返回值都认为是 true。 示例代码 假设集合 price 有如下记录: { "_id": 1, "min": 10, "max": 100 } { "_id": 2, "min": 60, "max": 80 } { "_id": 3,...
AggregateCommand.arrayElemAt(value: Expression[]): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。返回在指定数组下标的元素。 参数 value: Expression[] [<array>, <index>] 返回值 Object API 说明 语法如下: db.command.aggregate.arrayElemAt([<array>, <index>]) <array> 可以是任意解析为数字的表达式。 <index> 可以是任意解析为整形的表达式。如果是正数,arrayElemAt 返回在 index 位置的元素,如果是负数,arrayElemAt 返回从数组尾部算起的 index 位置的元素。 示例代码 假设集合 exams 有如下记录: { "_id": 1, "scores": [80, 60, 65, 90] } { "_id": 2, "scores": [78] } { "_id": 3, "scores": [95, 88, 92] } 求各个第一次考试的分数和和最后一次的分数: const $ = db.command.aggregate db.collection('exams').aggregate() .project({ first: $.arrayElemAt(['$scores', 0]), last: $.arrayElemAt(['$scores', -1]), }) .end() 返回结果如下: { "_id": 1, "first": 80, "last": 90 } { "_id": 2, "first": 78, "last": 78 } { "_id": 3, "first": 95, "last": 92 } AggregateCommand.arrayToObject(value: any): Object 支持端:小程序 2.7.4, 云函数 0.8.1, Web 聚合操作符。将一个数组转换为对象。 参数 value: any 返回值 Object API 说明 语法可以取两种: 第一种:传入一个二维数组,第二维的数组长度必须为 2,其第一个值为字段名,第二个值为字段值 db.command.aggregate.arrayToObject([ [<key1>, <value1>], [<key2>, <value2>], ... ]) 第二种:传入一个对象数组,各个对象必须包含字段 k 和 v,分别指定字段名和字段值 db.command.aggregate.arrayToObject([ { "k": <key1>, "v": <value1> }, { "k": <key2>, "v":...
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>, ...]) 表达式可以是形如 $ + 指定字段,也可以是普通字符串。只要能够被解析成字符串即可。 示例代码...