小程序云开发服务端(云函数-函数式编程)数据库取出数据突破限制

获取集合中的所有待办事项清单:因为有默认 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

小栗子🌰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 云函数入口文件
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),
}
})
}

本网站作品部分来自于网络,感谢开源社区的诸多开发者 My_Github and My_E-mail

Copyright © 2013 - 2020 Ruoduan's Blog All Rights Reserved.

滇ICP备19003866号 本网站版权归本站作者Ruoduan所有

访客数 : | 访问量 :

{% if theme.fireworks %} {% endif %} {% if theme.canvas_nest %} {% endif %} {% if theme.Background_music %} {% endif %}