小程序实现分页读取云数据库中的集合记录
文章目录前言一、云函数分页读取集合中的记录二、云函数分页获取一个集合所有记录总结前言在云开发中,小程序端获取一个集合所有记录的操作只能一次获取20条,而云函数端也只能一次获取100条,两种方法都不能真正实现获取一个集合中的所有记录,因此可以通过分批读取实现获取所有记录。一、云函数分页读取集合中的记录假设每页大小不超过100,示例代码如下:// 云函数入口文件const cloud = requir
·
前言
在云开发中,小程序端获取一个集合所有记录的操作只能一次获取20条,而云函数端也只能一次获取100条,两种方法都不能真正实现获取一个集合中的所有记录,因此可以通过分批读取实现获取所有记录。
一、云函数分页读取集合中的记录
假设每页大小不超过100,示例代码如下:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const MAX_LIMIT = 20 //分页的大小
// 云函数入口函数
exports.main = async (event, context) => {
var i = event.i; //获取页号:1,2,3,...
try {
return db.collection('todos').skip((i-1) * MAX_LIMIT).limit(MAX_LIMIT).get()
} catch (e) {
console.error(e)
}
}
二、云函数分页获取一个集合所有记录
示例代码如下:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const MAX_LIMIT = 100
// 云函数入口函数
exports.main = async (event, context) => {
// 先取出集合记录总数
const count = await db.collection('todos').count()
const total = count.total
// 计算需分几次取
const n = Math.ceil(total / 100)
// 承载所有读操作的 promise 的数组
const tasks = []
for (let i = 0; i < n; i++) {
const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
// 等待所有
return (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data), //所有记录
errMsg: acc.errMsg,
}
})
}
总结
获取一个集合中的所有记录是基于分页(分批)读取的思想,在分页的读取的结果上拼接就可获得整个集合的记录了
更多推荐
已为社区贡献4条内容
所有评论(0)