掘金日新计划&小程序云开发三

111 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天

一、引言

微信小程序的实用性已经日益剧增,对于开发者而言是机遇也是一个挑战,如果参与过小程序的开发,那么应该也对小程序的云开发有了一定的认识,同时小程序的云数据库也是一个很不错的选择。正常进行获取数据库中的数据,能够获取到的数据就只有20条,如下所示:

const db = cloud.database()
 // 获取数据库表格(user)中的数据 
db.collection('user').get();  

直接在小程序里请求数据每次最多只能返回20条数据,云函数里请求数据每次最多只能返回100条数据,如果想突破这个限制,最好的方式就是做分页。如果我们想一次性的拿到数据库里存的所有数据呢,比如数据库里有1000条数据,我们想一下子全部拿到,该怎么做呢?

假如集合里有103条数据,如果按照之前的分页思路,就是分两次请求,第一次请求1-100条,第二次请求101-103条。这样我们虽然是可以拿到103条数据,但是要做两次请求,我们该如何做,才能一次请求就可以获取这103条数据呢。

二、突破100条的原理

其实原理和我们分页的原理是一样的,只不过我们用for循环做多次请求,然后把这多次的请求组合到一起,然后把组合好的数据一次性全部返回。这样就通过一次请求获取所有数据。代码如下:

// 云函数入口文件
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、云函数单次返回的数据不能超过1M,如果需要超过1M,则需要使用小程序端的数据查询20条20条的进行组合了。

2、如果你一次性要返回很多数据,可以考虑在小程序里直接请求数据库,然后做20条20条的组装。

烟火向星辰,所愿皆成真!