调用云函数获取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;
});
}
}
[代码]
写好云函数记得部署
[图片]
点击授权触发云函数获取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);
},
}
})
[代码]
获取的数据截图
[图片]