以下是我们的场景
1、我们在云开发数据库中有一个以demo为名字的集合
2、demo中有5条记录,我们将五条记录放在数组当中,记录如下:
[
{name:'王八',sex:'男',class:'一班'},
{name:'赵美丽',sex:'女',class:'二班'},
{name:'王刚',sex:'男',class:'三班'},
{name:'李小芳',sex:'女',class:'四班'},
{name:'张丽丽',sex:'女',class:'三班'},
]
3、需求:需要我们分类出班级,输出格式如下:
['一班','二班','三班','四班']
我们在这里命名云函数为:demoFunction
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
/* 连接云数据库 */
const db =cloud.database()
const $ = db.command.aggregate
// 云函数入口函数
exports.main = async (event, context) => {
return await db.collection('demo')
.aggregate()
.group({
_id:null,
categories: $.addToSet('$class')
})
.end()
console.log('调用成功');
}
首先,代码通过 require(‘wx-server-sdk’) 导入了 wx-server-sdk 模块,用于初始化云函数环境。
然后,通过 cloud.init() 方法初始化云环境,使用 cloud.DYNAMIC_CURRENT_ENV 来指定当前云环境。
接下来,代码通过 cloud.database() 获取了数据库实例,并将其赋值给 db 变量。在云函数的入口函数 exports.main 中,代码使用 db.collection(‘demo’) 获取了名为 demo 的集合,并开始进行聚合操作。 聚合操作使用了 aggregate() 方法创建一个聚合管道。在聚合管道中,代码调用了 group() 方法进行分组操作。group()方法传入一个对象,其中 _id 字段设置为 null,表示不按照任何字段进行分组。而 categories 字段使用了 . a d d T o S e t ( ′ .addToSet(' .addToSet(′class’),表示将 class 字段的值添加到一个集合中。
最后,代码调用了 end() 方法结束聚合操作,并返回聚合结果。
这段代码的作用是在 demo 集合中进行聚合操作,将 class 字段的值按照不重复的方式存储到 categories数组中,并返回聚合结果。
wx.cloud.callFunction({
name:'demoFunction',
success:(res)=>{
console.log(res);
}
})
1、云函数demoFunction
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db= cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
return await db.collection('demo').get({
success:(res)=>{
console.log('其他',res.data);
}
})
}
2、js调用云函数
wx.cloud.callFunction({
name:'demoFunction',
success:(res)=>{
console.log(res);
}
})
3、得到如下并给其赋值给变量:testData
[
{name:'王八',sex:'男',class:'一班'},
{name:'赵美丽',sex:'女',class:'二班'},
{name:'王刚',sex:'男',class:'三班'},
{name:'李小芳',sex:'女',class:'四班'},
{name:'张丽丽',sex:'女',class:'三班'},
]
4、对testData进行处理
/* 分类
1、遍历数组
2、筛选
3、得到resultArray原始 ["java", "小程序", "python", "PHP", "MySQL"]
4、新建数组,构造完整 const modifiedResultArray = ['全部', ...resultArray];
输出结构:["全部", "java", "小程序", "python", "PHP", "MySQL"]
*/
const valuesSet = new Set();
testData.forEach(obj => {
const value = obj.kind;
valuesSet.add(value);
});
const resultArray = Array.from(valuesSet);
console.log(resultArray);
5、结果
['一班','二班','三班','四班']
1、云函数处理:由于云开发的的云函数每次取值只能取100条的限制,直接使用云函数调用聚合可以从整个集合中分出类。
2、本地分类:能够节省云函数调用次数,节省资源,减轻服务器负担。
1、云函数:数据量庞大
2、本地:
2.1数据量小,不用做分页处理,比如小于100条记录时。
2.2当使用传统前后端数据传参时,由于wx.request返回值可以不受100条记录限制,所有可以使用本地进行分类。