1) 需求:
在调试的时候发现,通过wx.cloud.database().collection函数最多只能渠道云数据库前20条数据。我的需求是希望能够取到云数据库的全部数据,30w~100w量级,网上查资料,看了下官方文档。有以下代码:
2) 代码:
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
// 先取出集合记录总数
const countResult = await db.collection('todos').count()
const total = countResult.total
// 计算需分几次取
const batchTimes = Math.ceil(total / 100)
// 承载所有读操作的 promise 的数组
const tasks = []
for (let i = 0; i < batchTimes; 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,
}
})
}
3)
① 我能否在index.js中输入上方代码(按需变动),而不是在app.js中?
② 以上代码做相关参数替换匹配我自己的实际场景后,能否实现取出当前数据库下所有的数据(30w~100w量级)?
一次性取出那么多数据?导出功能?