小程序开发总结日记(三)——小程序云开发,不使用云函数,突破20条/次的数据查询限制

需求背景

我们如果使用小程序“云开发功能”,在调用(查询)数据时,会用到这样的代码:

const db = wx.cloud.database()

db.collection('todos').get({
  success: function(res) {
    // res.data 是一个包含集合中有权限访问的所有记录的数据,不超过 20 条
    console.log(res.data)
  }
})

wx.cloud.database() 是使用云开发数据库的的“入口”,把它赋给常量 db ,以对象的形式方便后续调用相关的数据库操作方法(增、删、改、查)。并最终通过 .get() 方法获取数据。

但我们知道,“小程序端在获取集合(数据表)数据时服务器一次默认并且最多返回 20 条记录,云函数端这个数字则是 100。”也就是说使用云开发的话,小程序查询数据库存在一定的局限性,那有没有办法突破这个限制?

一、使用 for 循环

虽然存在一次性只能获取20条数据的限制,但如果想突破20条限制,同时查询数据并不是很多的情况下(大于20,小于100。),我们可以使用 for 循环。

思路:想要获取N条数据,循环N次,一次循环查询1条。

for (let i = 0; i < 30; i++) {   //   查询30次
      //    数据查询代码
}

思路延伸:我们不妨把格局放大一些,既然一次能查20条,那循环N次查询后,能获取的数据岂不是 20*N ?事实正是如此。

二、获取所有数据

有时候我们需要获取数据库中所有的数据,我的实现思路是:

1、获取数据总条数。

使用 wx.cloud.database() 的 .count() 方法来动态获取数据库某个集合的总条数,在页面加载的时候载入。

getCount() {    // 1、获取总条数,写入data
    db.collection('todus').count().then(res => {
        this.setData({
            total : res.total
        })
    })
},
onLoad: function() {
    // 页面加载时调用方法,提前获取记录总条数,以供后续使用
    this.getCount()
}

2、计算循环次数(组数)

将总条数设置为变量 total,用 20 对 total 取模( count % 20 ),为 0 则组数为 count / 20 ,不为 0 说明除不尽,有余数则需要多循环1次,所以组数为 (count / 20) + 1 。使用 parseInt() 方法对计算结果取整。

这样就得到了需要循环的次数 group 。得到循环次数后,就可以使用 for 循环对数据库批量查询了。最终就能得到集合里所有的数据了。

let count = this.data.total
let group = 0   //  每组最多获取20条信息,获取总的组数

if (count % 20 == 0) {
    group = count / 20
} else if (count % 20 != 0) {
    group = parseInt(count / 20) + 1  // parseInt() 取整
}

for (let i = 0; i < group; i++) {
    // 数据库查询方法
}

注意事项

写数据库查询方法时,要设置一定的查询条件,确保每一次循环查询得到的结果是连贯且不重复的。否则哪怕循环查询一万次也是得到相同的结果。大家可以参考我的另一篇文章:

https://blog.csdn.net/weixin_45828020/article/details/131344489

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值