看过石头哥云开发基础课程的同学一定知道,直接在小程序中请求数据每次最多只能返回20条数据,在云函数中请求数据最多只能返回100条数据每次。如果想突破这个限制,最好的办法就是做分页。当然我也教大家分页的云开发基础知识。但有这样一个限制。如果我们想一次获取数据库中存储的所有数据怎么办?比如数据库中有1000条数据,我们想一次性获取全部。我们应该做什么? ? ?
今天教大家如何使用云函数每次最多返回100条。
1. 云功能超过100项限制
如上图所示,我的num集合中有103条数据。如果按照之前的分页思路,我会发出两次请求,第一次请求1-100条,第二次请求101-103条。这样,虽然我们可以拿到103条数据,但是我们需要发出两次请求。我们应该怎么做,才能一次请求得到这103条数据呢?
1-1、突破100条原则
其实原理和我们的分页原理是一样的,只不过我们用一个for循环发出多个请求,然后将这些多个请求组合在一起,然后一次性返回所有组合后的数据。这样,所有数据都可以在一次请求中获取。
1-2、代码实现
这里的代码是用云函数写的,我已经在评论里给大家写好了操作步骤。
如上图所示,我们只需要经过三步就可以获得全部103条数据。
这样我们就可以通过一次请求获取所有的数据。是不是感觉非常简单呢?这里把代码贴出来给大家看看。
// 云函数入口文件
const cloud = require('wx-server-sdk')
// 云开发环境初始化
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV})
exports.main = async (event, context) => {
const db = cloud.database()
// 1,获取数据的总个数
let count = await db.collection('num').count()
count = count.total
// 2,通过for循环做多次请求,并把多次请求的数据放到一个数组里
let all = []
for (let i = 0; i < count; i += 100) { //自己设置每次获取数据的量
let list = await db.collection('num').skip(i).get()
all = all.concat(list.data);
}
// 3,把组装好的数据一次性全部返回
return all;
}
1-3、注意事项
云函数一次返回的数据不能超过1M。如果需要超过1M,则需要使用小程序的数据查询来合并20条、20条。所以如果想一次性返回大量数据,可以考虑直接在小程序中请求数据库,然后组装20条20条数据。
我也会在下面的小程序中教大家如何组装。
二、小程序直接请求数据库突破20 2-1,并打开
这里我们不去深究其原理。和上面一模一样,只是需要做一些简单的操作才能在小程序中使用。您也可以阅读我的另一篇文章。
《同步小程序中的使用和变异步骤,解决回调地狱问题》
现在最新版本的小程序开发者工具好像支持and方法了,好像不勾选增强编译就可以了。但出于安全考虑,最好勾选增强编译。
2-2、权限修改
要在小程序中直接从数据库获取数据,记得更改集合的权限。
2-3、代码实现
细心的同学肯定可以看到上面的代码和我们云函数中的代码基本是一样的。
至此我们已经完美突破了小程序的限制,可以返回任意数量的我们想要的数据。