在微信小程序中,`aggregate` 方法用于执行数据聚合操作。以下是一些基本的使用示例和说明:
随机样本抽取
使用 `Aggregate.sample(size: number)` 方法从集合中随机抽取指定数量的记录。
示例代码:
```javascript
db.collection('users')
.aggregate()
.sample({ size: 1 })
.end()
.then(result => {
console.log(result); // 返回随机选中的一个用户记录
})
.catch(err => {
console.error(err);
});
```
匹配记录
使用 `Aggregate.match(object: Object)` 方法根据指定条件过滤记录。
示例代码:
```javascript
db.collection('articles')
.aggregate()
.match({ author: 'stark' })
.end()
.then(result => {
console.log(result); // 返回所有 author 字段为 stark 的文章记录
})
.catch(err => {
console.error(err);
});
```
限制返回记录数
使用 `limit(number)` 方法限制返回记录的数量。
示例代码:
```javascript
db.collection('users')
.aggregate()
.limit(1000)
.end()
.then(result => {
console.log(result); // 返回最多1000条用户记录
})
.catch(err => {
console.error(err);
});
```
添加字段和投影
使用 `addFields(object: Object)` 方法向结果中添加新字段。
使用 `project(object: Object)` 方法指定返回的字段。
示例代码:
```javascript
db.collection('xxx')
.aggregate()
.addFields({
matched: $.and([
{ $lte(['$createTime', a] ),
{ $gte(['$createTime', b] ),
{ $eq(['$key', 'xxxx'] )
])
})
.match({ matched: !0 })
.project({ _id: 0, formatDate: $.dateToString({ date: '$createTime', format: '%Y-%m-%d' }) })
.group({ _id: '$type', num: $.sum(1) })
.end()
.then(result => {
console.log(result); // 返回按 type 分组的记录,并计算每组的数量
})
.catch(err => {
console.error(err);
});
```
注意事项
`aggregate` 方法支持小程序 2.7.4 及以上版本。
在云函数中使用 `aggregate` 方法时,需要注意云函数的版本支持情况。
对于大量数据的处理,可以考虑分页查询或使用云函数进行多次处理。