本文整理自网络,侵删。
AggregateCommand.addToSet(value: Expression): Object
支持端:小程序 2.7.4, 云函数 0.8.1, Web聚合操作符。聚合运算符。向数组中添加值,如果数组中已存在该值,不执行任何操作。它只能在 group stage 中使用。
参数
value: Expression
表达式
返回值
Object
API 说明
addToSet 语法如下:
db.command.aggregate.addToSet(<表达式>)
表达式是形如 $ + 指定字段 的字符串。如果指定字段的值是数组,那么整个数组会被当作一个元素。
示例代码
假设集合 passages 的记录如下:
{ "category": "web", "tags": [ "JavaScript", "CSS" ], "title": "title1" }
{ "category": "System", "tags": [ "C++", "C" ], "title": "title2" }
非数组字段
每条记录的 category 对应值的类型是非数组,利用 addToSet 统计所有分类:
const $ = db.command.aggregate
db
.collection('passages')
.aggregate()
.group({
_id: null,
categories: $.addToSet('$category')
})
.end()
返回的结果如下:
{ "_id": null, "categories": [ "System", "web" ] }
数组字段
每条记录的 tags 对应值的类型是数组,数组不会被自动展开:
const $ = db.command.aggregate
db
.collection('passages')
.aggregate()
.group({
_id: null,
tagsList: $.addToSet('$tags')
})
.end()
返回的结果如下:
{ "_id": null, "tagsList": [ [ "C++", "C" ], [ "JavaScript", "CSS" ] ] }
AggregateCommand.avg(value: Expression<number>): Object
支持端:小程序 2.7.4, 云函数 0.8.1, Web聚合操作符。返回一组集合中,指定字段对应数据的平均值。
参数
value: Expression<number>
number
返回值
Object
API 说明
avg 的语法如下:
db.command.aggregate.avg(<number>)
avg 传入的值除了数字常量外,也可以是任何最终解析成一个数字的表达式。它会忽略非数字值。
示例代码
假设集合 students 的记录如下:
{ "group": "a", "name": "stu1", "score": 84 }
{ "group": "a", "name": "stu2", "score": 96 }
{ "group": "b", "name": "stu3", "score": 80 }
{ "group": "b", "name": "stu4", "score": 100 }
借助 avg 可以计算所有记录的 score 的平均值:
const $ = db.command.aggregate
db
.collection('students')
.aggregate()
.group({
_id: null,
average: $.avg('$score')
})
.end()
返回的结果如下:
{ "_id": null, "average": 90 }
AggregateCommand.first(value: Expression): Object
支持端:小程序 2.7.4, 云函数 0.8.1, Web聚合操作符。返回指定字段在一组集合的第一条记录对应的值。仅当这组集合是按照某种定义排序( sort )后,此操作才有意义。
参数
value: Expression
表达式
返回值
Object
API 说明
first 的语法如下:
db.command.aggregate.first(<表达式>)
表达式是形如 $ + 指定字段 的字符串。
first 只能在 group 阶段被使用,并且需要配合 sort 才有意义。
示例代码
假设集合 students 的记录如下:
{ "group": "a", "name": "stu1", "score": 84 }
{ "group": "a", "name": "stu2", "score": 96 }
{ "group": "b", "name": "stu3", "score": 80 }
{ "group": "b", "name": "stu4", "score": 100 }
如果需要得到所有记录中 score 的最小值,可以先将所有记录按照 score 排序,然后取出第一条记录的 first。
const $ = db.command.aggregate
db
.collection('students')
.aggregate()
.sort({
score: 1
})
.group({
_id: null,
min: $.first('$score')
})
.end()
返回的数据结果如下:
{ "_id": null, "min": 80 }
AggregateCommand.last(value: Expression): Object
支持端:小程序 2.7.4, 云函数 0.8.1, Web聚合操作符。返回指定字段在一组集合的最后一条记录对应的值。仅当这组集合是按照某种定义排序( sort )后,此操作才有意义。
参数
value: Expression
表达式
返回值
Object
API 说明
last 的语法如下:
db.command.aggregate.last(<表达式>)
表达式是形如 $ + 指定字段 的字符串。
相关阅读 >>
微信小程序表单组件 picker-view(嵌入页面的滚动选择器)
更多相关阅读请进入《微信小程序》频道 >>
Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者