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

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

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

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

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

为了防止误操作以及保护小程序体验,开发者是需要避免一次性获取过量的数据,只获取必要的数据,所以 服务器一次默认并且最多返回 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条云开发数据库限制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Beginning iPhone and iPad Web Apps

Beginning iPhone and iPad Web Apps

Chris Apers、Daniel Paterson / Apress / 2010-12-15 / USD 39.99

It seems that everyone and her sister has developed an iPhone App—everyone except you, the hard-working web professional. And now with the introduction of the iPad, you may even feel farther behind. B......一起来看看 《Beginning iPhone and iPad Web Apps》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换