獲取集合中的所有待辦事項清單:因爲有默認 limit 100 條的限制,因此很可能一個請求無法取出所有數據,需要分批次取:
步驟
- 定義最大條數也就是 下面👇示🌰中的
MAX_LIMIT
- 獲取數據總條數
countResult.total
- 總條數 / MAX_LIMIT 想上取整計算出 要取幾次
batchTimes
- 關鍵步驟:
- 遍歷
batchTimes
利用skip()
向數據庫取對應次數的數據 - 返回的若干的
Promise
儲存在tasks
數組中
- 遍歷
- 創建儲存數據的列表
data
- 組合數據
Promise.all(tasks)
reduce((acc, cur)
組合數據
注意⚠️: 數據操作大部分都是異步操作;小程序的雲開發目前也是基於nodejs8
小栗子🌰
// 雲函數入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 初始化雲數據庫
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
// 數據庫對象
const playCollection = await db.collection("playlist")
// 數據庫集合總數
const countResult = await db.collection('playlist').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('playlist').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
let data = {
data: []
}
// 組合數據
if (tasks.length > 0) {
(await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
}
})
}