针对微信云开发获取数据条数100条的限制,官方 也有明确的解释,以及提供对应得解决方法。
此处主要给到如何封装成方法得形式,快捷获取相应的得全量数据。
官方方法:
const cloud = require('wx-server-sdk')
cloud.init()
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,
}
})
}
方法封装
utils.js
定义returnAllData方法
//返回所有数据 超100条返回
exports.returnAllData = (event, context) => {
return new Promise(async (resolve, reject) => {
try {
const { name } = event
const MAX_LIMIT = 100
// 先取出集合记录总数
const countResult = await db.collection(name).count()
const total = countResult.total
if (!total) { //如果为空则直接返回 []
resolve([])
return
}
// 计算需分几次取
const batchTimes = Math.ceil(total / 100)
// 承载所有读操作的 promise 的数组
const tasks = []
for (let i = 0; i < batchTimes; i++) {
const promise = context.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
// 等待所有
const result = (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
errMsg: acc.errMsg,
}
})
resolve(result.data)
} catch (error) {
reject(error)
}
})
}
如何调用
const _utils = require('../utils/index')
...
// data 为返回得全量数据
const data = await _utils.returnAllData(
{ name: '集合名' },
db.collection('集合名').where({查询参数}).orderBy('createTime', 'desc'))