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

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

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

微信团队之前在云课程上就已经分享了打破数据库列表限制的2种方法,通过云函数最多可获得100条数据。(如果你也想上这类干货课程,可以点击链接填问卷,我们将根据大家的需求确定课程内容,并将于近期上线课程,敬请关注公众号。)

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

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

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.dataconsole.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.databaseconst 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 搭配使用多种服务,在数据获取上有着一定的优势。当大家在使用云开发时,不妨多利用云函数进行数据库和存储的操作。

互动福利

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

转载于:https://juejin.im/post/5cf0ca966fb9a07eb30961a7

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

  1. Mixly第三方库开发的两种方法——U8g2库二次开发

    Mixly第三方库开发的两种方法--U8g2库二次开发 前言 方法一:自定义库 1.创建库文件夹 2.开始编程 2.1.定义图形块的基本信息 2.2.定义图形块的外观样式 2.3.定义图形块与C语言的 ...

  2. [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)...

    /// <summary> /// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库 /// 1.首先在在项目中引用SQLDMO.DLL文件. /// 2.在引用中的SQLDM ...

  3. [PowerBI]两种方法计算每月或每季开发的新客户数量

    12月追加:欢迎加入知乎[微软BI技术圈],一起讨论.分享包括PowerBI在内的一切BI话题! 两种方法计算每月或每季开发的新客户数量 简述 客户分析中,有时你可能需要分析每隔一段时间有多少新客户流 ...

  4. 50种方法巧妙优化你的SQLServer数据库(转)

    查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...

  5. linux卸载mysql和myodbc_linux下卸载mysql rpm安装方式和源码安装方式的两种方法

    转自http://hi.baidu.com/myphpzone/blog/item/562e496f0dfbb1d680cb4a2d.html linux下MySQL卸载方法 一.源码安装的卸载方法: ...

  6. php 源码简单加密的几种方法

    第一种:利用base64 + 压缩 加密. 加密函数如下: function encode_file_contents($filename) { $type=strtolower(substr(str ...

  7. PHP获取网页源码最简单的两种方法

    第一种:curl 废话不多说,直接上代码 //1,获取curl句柄 $ch = curl_init();// 2. 设置选项,包括URL curl_setopt($ch,CURLOPT_URL,&qu ...

  8. 组态王怎么做进度条_三种方法制作进度条效果

    进度条可以说出现在我们生活的方方面面,游戏.视频加载会碰到它,刷新会碰到它,就连网络不顺畅时也会碰到它.进度条不仅仅只是作为信息载入时的标志,还可以运用到片头开场,让观众对接下来的视频内容产生好奇和期 ...

  9. PHP开发论坛步骤,5种方法让你成为php开发高手!

    我们经常会在聊天室或论坛里遇到PHP 初 学者问各种各样的有关PHP 的问题,如果问题过于简单,人们往往回复为"看手册"."先学学PHP吧"."我们可 ...

最新文章

  1. tensorflow LSTM
  2. python培训班一般多少钱-广州Python培训机构一般多少钱
  3. jenkins参数化构建过程
  4. 每天学一点儿shell:Linux三剑客——awk命令
  5. 山体等高线怎么看_每日一题 | 此处向斜山,你看出来了吗?
  6. python把数字逐一存入列表_python实现将range()函数生成的数字存储在一个列表中...
  7. DNS服务启动时卡在:Generating /etc/rndc.key:
  8. Linux之cut命令
  9. 稀疏矩阵的创建--十字链表
  10. [Silverlight入门系列]动态创建控件和绑定
  11. l455在线清零服务器,爱普生epson l455清零软件官方版
  12. 一键清理垃圾的bat文件
  13. 专访雪球网技术团队:用Node.js做前端的类SOA架构
  14. vue3和vue2中mian.js的区别,在其中配置路由为例
  15. 问题:在vue中照片墙的照片数量超过限制数量后,要隐藏图片上传按钮,如何解决?
  16. 计算机网络设备调试经验,一种计算机网络设备调试装置的制作方法
  17. JAV迷你共享单车项目
  18. 使用函数创建多个备选BOM
  19. 刷机总是出现missed hello_金立-GN3002L 无法开机,怎么能解锁刷机呢?
  20. LightDB(pg) 通过DBeaver执行SQL发现SQL不能并行

热门文章

  1. 递归下降语法分析程序
  2. InfoPath开发
  3. centos查看模块信息和模块路径
  4. PowerDesigner中Stereotype的创建图解
  5. VC++开发简易输电线路管理信息系统
  6. 图解Windows下使用SSH Secure Shell Client远程连接Linux
  7. 面向对象的模型设计方法
  8. bootstrap中modal弹出框的使用
  9. Json对象与Json字符串互转(4种转换方式)
  10. Unity3D 2D游戏中寻径算法的一些解决思路