评论

调用云函数获取openid、联表查询、分页数据

lookup联表查询与分页功能

为首页获取内容设计了用户集合、表单集合

  • 用户集合:是用户同意授权之后将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);
},
}
})
  • 获取的数据截图
最后一次编辑于  2021-03-04  
点赞 2
收藏
评论

1 个评论

  • PD
    PD
    2021-11-14

    正好要用到相关知识,感谢总结

    2021-11-14
    赞同
    回复
登录 后发表内容