微信小程序云数据库获取集合所有数据
取集合所有数据小程序端与云函数端的表现会有如下差异:小程序端:如果没有指定 limit,则默认且最多取 20 条记录。云函数端:如果没有指定 limit,则默认且最多取 100 条记录。获取集合中的所有待办事项清单:因为有默认limit100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取:云函数端// 云函数入口文件const cloud...
·
取集合所有数据
小程序端与云函数端的表现会有如下差异:
-
小程序端:如果没有指定 limit,则默认且最多取 20 条记录。
-
云函数端:如果没有指定 limit,则默认且最多取 100 条记录。
获取集合中的所有待办事项清单:因为有默认 limit
100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取:
云函数端
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
throwOnNotFound: false
})
const db = cloud.database()
const MAX_LIMIT = 2
// 云函数入口函数
exports.main = async (event, context) => {
// 先取出集合记录总数
const countResult = await db.collection('test').count()
console.log(countResult)
const total = countResult.total
// 计算需分几次取
const batchTimes = Math.ceil(total / MAX_LIMIT)
// 承载所有读操作的 promise 的数组
const tasks = []
for (let i = 0; i < batchTimes; i++) {
//get()操作返回的是Promise对象,每获取一个Promise就压栈进入tasks数组
const promise = db.collection('test').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
console.log(tasks)
console.log(await Promise.all(tasks))
// 等待所有
/* Promise.all 方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组。
在这里,返回的数组的元素就是res.data
数组reduce操作:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
total 必需。初始值, 或者计算结束后的返回值。
currentValue 必需。当前元素
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。
initialValue 可选。传递给函数的初始值
**此处acc为初始值,cur为当前元素
concat() 方法用于连接两个或多个数组
*/
return (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
errMsg: acc.errMsg,
}
})
}
更多推荐
已为社区贡献8条内容
所有评论(0)