小程序雲開發服務端(雲函數-函數式編程)數據庫取出數據突破限制

獲取集合中的所有待辦事項清單:因爲有默認 limit 100 條的限制,因此很可能一個請求無法取出所有數據,需要分批次取:

步驟

  1. 定義最大條數也就是 下面👇示🌰中的 MAX_LIMIT
  2. 獲取數據總條數 countResult.total
  3. 總條數 / MAX_LIMIT 想上取整計算出 要取幾次 batchTimes
  4. 關鍵步驟:
    • 遍歷batchTimes 利用skip() 向數據庫取對應次數的數據
    • 返回的若干的Promise 儲存在 tasks數組中
  5. 創建儲存數據的列表 data
  6. 組合數據
    • 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),
      }
    })
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章