调用云函数获取openid、联表查询、分页数据
为首页获取内容设计了用户集合、表单集合
用户集合:是用户同意授权之后将userInfo信息上传该集合
表单集合是在用户授权之后,通过表单发帖
* 利用封装好的一个云函数(多个方法)获取openid赋值给userId作为表单合集的字段,准备与用户集合的openid联表查询
封装分页功能到同一云函数,在首页获取你所需要的用户数据
// 云函数入口文件
const cloud = require("wx-server-sdk");
cloud.init({
env: "你自己的环境名",
traceUser: true,
});
const db = cloud.database();
const _ = db.command;
const $ = db.command.aggregate;
//开始封装云函数
exports.main = async (event, context) => {
switch (event.action) {
case "getid":
return getId();
//用户集合与表单集合的联合查询+分页数据
case "reload":
return reLoad(event);
}
// 封装接口 user_openid 不要忘记async与await
async function getId() {
const wxContext = await cloud.getWXContext();
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
};
}
//联表查询+分页数据
async function reLoad(e){
//集合名称
let dbName = e.dbName;
//筛选条件 默认为空
let filter = e.filter ? e.filter : null;
//当前页 默认为1
let pageIndex = e.pageIndex ? e.pageIndex : 1;
//数据显示条数 默认为20
let pageSize = e.pageSize ? e.pageSize : 20;
//获取集合中的总记录
let countResult = await db.collection(dbName).where(filter).count();
//总记录数
let countTotal = countResult;
//计算需要多少页 取整数
let totalSize = Math.ceil(countTotal / 20);
//将最后的查询结果返回给小程序端
return db
.collection(e.dbName)
.aggregate()
.lookup({
//要匹配userIndex集合的openid字段
from: "userIndex",
localField: "userId",
foreignField: "_openid",
as: "userlist",
})
.match(filter)
.skip((pageIndex - 1) * pageSize)
.limit(pageSize)
.end()
.then((res) => {
return res;
})
.catch((err) => {
return err;
});
}
}
写好云函数记得部署
![](https://image.wxopen.club/content_ddeb0b52-7e5e-11eb-8f6f-001a7dda7111.png)
点击授权触发云函数获取openid 赋值给userId
wx.cloud.callFunction({
name:"云函数名",
data:{
action:"getid",
},
complete: (res) => {
console.log("openid: ", res);
this.setData({
userId: res.result.openid,
});
},
}
})
- 截图
- 之后将openid与表单数据一起上传到表单集合,之后通过openid获取两集合的联合查询数据,同时分页
wx.cloud.callFunction({
name:"云函数名",
data:{
action:"reload",
dbName:"表单集合名",
filter:{限制条件对象},
},
success: (res) => {
console.log(res);
},
fail: (err) => {
console.log(err);
},
}
})
- 获取的数据截图