码code | 巧用2种方法,打破20条云开发数据库限制

栏目: 数据库 · 发布时间: 6年前

内容简介:小程序·云开发是小程序的一种后端开发模式,能够帮助开发者快速构建微信小程序的后端服务,无需再搭建服务器。然而熟悉云开发的开发者应该了解,即使云开发能基本满足小程序开发需求,但在数据获取上还是有所限制。为了防止误操作以及保护小程序体验,开发者是需要避免一次性获取过量的数据,只获取必要的数据,所以

小程序·云开发是小程序的一种后端开发模式,能够帮助开发者快速构建微信小程序的后端服务,无需再搭建服务器。

然而熟悉云开发的开发者应该了解,即使云开发能基本满足小程序开发需求,但在数据获取上还是有所限制。

为了防止误操作以及保护小程序体验,开发者是需要避免一次性获取过量的数据,只获取必要的数据,所以 服务器一次默认并且最多返回 20 条记录。 但对于有数据大量获取需求的开发者来说,只能放弃云开发吗?答案是no。

微信团队之前在云课程上就已经分享了打破数据库列表限制的2种方法, 通过云函数最多可获得100条数据。

码code | 巧用2种方法,打破20条云开发数据库限制

这次的方法分享是以音乐播放器小程序为实例,通过云函数调用云数据库,实现用户上传音乐的功能。

音乐播放器的核心功能是播放歌曲,也就是需要它能够获取数据库所存储的歌曲信息,然后传到小程序端,去实现播放器的播放、暂停、切换。

码code | 巧用2种方法,打破20条云开发数据库限制

01 上传歌曲信息至云数据库

歌曲信息包括id、歌曲名、歌手、封面、音频文件等。

playlist: [{
  _id: '',
  cover: '',
  singer: '',
  title: '',
  src: ''
}],

02 利用云函数获取数据列表

getlist(){
  let that = this;
  wx.cloud.callFunction({
    name: ’getmlist’,//自己的云函数名称

    success: res=>{
      wx.stopPullDownRefresh()

      if(res.result){
        let playlist = res.result.data
        console.log({
          playlist
        })
        if(playlist = undefined  playlist.length == 0){
          wx.showToast({
            title: ’no data’,
          })
        }else{
          that.setData({
            isShowArtcle: true,
            playlist: playlist,
          })
        }

      } 
    },

    fail:err => {
      wx.stopPullDownRefresh()
      wx.showToast({
        title: ’no data’,
      })
    }
  })
}

然而目前的做法只能获取20条数据,也不能支持用户上传音乐文件并正常加载播放。为了实现这一功能,需要我们设置云函数,调用云数据库,从而打破数据限制。

方法1:分页获取数据

这个方法是将数据分为若干页,用户可以通过选择页数去获取更多的数据。这也就需要指定skip,设置分页,从第 0 条记录开始取。假设一页 10 条,现在要取第 2 页,则可以指定 skip 10 条记录。

代码示例如下:

//云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()

//云函数入口函数
exports.main = async (event, context) => {
  const db = cloud.database()

  db.collection('musiclist')
    .where({
      // 填入当前用户 openid
      _openid: 'xxx', 
    })
    //假设一页有10条数据
    .skip(10) 
    .limit(10) 
    .get()
    .then(res => {
      console.log(res.data)
    })
    .catch(err => {
      console.error(err)
    })
    
}

方法2:获取所有数据

这个方法是用户可以直接获取所有数据,但因为默认limit100条,可能一个请求无法取出所有数据,所以需要分批次获取,将集合中的所有歌曲信息获取出来。

代码示例如下:

//云函数入口文件
const cloud = require('wx-server-sdk')

const db = wx.cloud.database()
cloud.init()

//云函数入口函数
exports.main = async (event, context) => {
  getall:async(){
    const db = wx.cloud.database
    const Max_limit = 100
    // 先取出集合记录总数
    const countResult = await db.collection('musiclist').count()
    const total = countResult.total
    // 计算需分几次取
    const batchTimes = Math.ceil(total / Max_limit)
    
    const tasks = []
    for(let i = 0; i < batchTimes; i++) {
      const promise = db.collection('musiclist').skip(i * Max_limit).limit(Max_limit).get()
        tasks.push(promise)
    }
    // 等待所有
    return (await Promise.all(tasks)).reduce((acc, cur) => {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    })))
  }
}

这两类方法, 本质上是多次通过云函数获取数据,最终成功获取所有集合数据。

因为云函数端属于管理端,所以它可以统计所有集合的记录数。同时云函数之间也可互相调用,还能通过云函数后端 SDK 搭配使用多种服务,在数据获取上有着一定的优势。当大家在使用云开发时,不妨多利用云函数进行数据库和存储的操作。

互动福利

扫码关注公众号,回复关键词『 音乐 』,就能获取本次实例音乐播放器的 源码包

码code | 巧用2种方法,打破20条云开发数据库限制


以上所述就是小编给大家介绍的《码code | 巧用2种方法,打破20条云开发数据库限制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Probability and Computing

Probability and Computing

Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00

Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具