微信小程序读取数据超过20,100的限制方法
首先,无论小程序端单次读取数据库最多20条,云函数单次读取数据库最多100条,这是官方限制,是无法突破的,但是如果你能黑进TX改限制,那我倒头便拜。
所以解决方案就是把单次查询分解成若干次
云函数端
1.首先获得欲查询数据的总数
async function getCountIndexUserId(userId) {let count = await db.collection('info').where({"userId": userId}).count();return count;
}
获取“info”集合中所有“userId”的值为指定值userId的总数
2.然后编写单次查询函数
单次查询数据总量不超过100
async function getListIndexUserId(userId,skip) {let list = await db.collection('info').where({"userId": userId}).orderBy('_id', 'asc').skip(skip).get();return list .data;
}
获取“info”集合中所有“userId”的值为指定值,序号从 skip 到 skip+100 的数据
skip使用说明详见官方文档
3.循环查询,然后组合到一起
云函数的main函数如下:
exports.main = async (event, context) => {let count = await getCountIndexUserId(event.userId);count = count .total;let list=[]for (let i = 0; i < count ; i += 100) {list = quesionList.concat(await getListIndexUserId(event.userId, i));}return list ;
}
结束,需要注意的是,云函数单次返回的数据不能超过1M,如果需要超过1M,则需要使用小程序端的数据查询20条20条的进行组合了
小程序端
思路与云函数端一样,不同的是小程序端不允许await
,需要用Promise
方法实现
1.获取总数
function getListCount(openid) {return new Promise((resolve, reject) => {db.collection('info').where({"studyUserId": openid}).count().then(res => {resolve(res.total);}).catch(e => {console.log(e)reject("查询失败")})})
}
这里查询数据库集合“info”中“studyUserId”的值为给定值“openid”的所有数据总数
2.单次查询函数
function getListIndexSkip(openid, skip) {return new Promise((resolve, reject) => {let statusList = []let selectPromise; if (skip > 0) {selectPromise = db.collection('info').where({"studyUserId": openid}).skip(skip).get()} else {//skip值为0时,会报错selectPromise = db.collection('info').where({"studyUserId": openid}).get()}selectPromise.then(res => {resolve(res.data);}).catch(e => {console.error(e)reject("查询失败!")})})
}
需要注意的是,小程序端的数据库查询不允许skip设置为0,否则会报错,有哪位大神知道TX为什么这么设计,还请赐教
3.循环查询,整合数据
getListCount(openid).then(res => {let count = reslet list = []for (let i = 0; i < count ; i += 20) {getListIndexSkip(openid, i).then(res => {list = list.concat(res);if (list.length == count ) {resolve(list)}}).catch(e => {console.error(e)reject("查询失败")})}})})
微信小程序读取数据超过20,100的限制方法相关推荐
- 微信小程序读取nfc获取Ndef写入的数据
微信小程序读取nfc获取Ndef写入的数据 文章目录 1.新建一个utils工具类里面新建utils.js文件 2.在add.json里面新建页面 3.代码如下(示例):nfc.wxml 4.代码如下 ...
- 微信小程序之数据交互
学习视频: https://www.bilibili.com/video/BV1Gv411g7j6?p=88&spm_id_from=pageDriver 数据交互(首页) 把图片.视频资源放 ...
- 《微信小程序》 数据访问实例详解
如图所示 1.每个视图(.wxml)只需要添加对应名字的脚本(.js)和样式(.wxss)就可以了,不需要引用,page下面的脚本以及样式都是继承至最外面的app.js , app.wxcss 2.脚 ...
- 微信小程序开发数据缓存基础知识辨析以及运用实例
微信小程序开发数据缓存基础知识辨析以及运用实例 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的 ...
- 微信小程序之微信登陆 —— 微信小程序教程系列(20)
简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...
- 把jquery city-picker地区选择插件数据改成微信小程序省市地区数据一样(php代码抓取微信小程序地区数据)
原版插件 https://github.com/tshi0912/city-picker 资源下载 https://download.csdn.net/download/jianye112/12036 ...
- 通过asp.netWebService给微信小程序传递数据
通过webservice服务方法同微信小程序进行数据交互: 1.微信接收数据并展示: 后台:asp部分: 新建webService服务 WebService1.asmx 在webService1.as ...
- 小程序素材抓取软件_如何抓取微信小程序的数据?
2017年1月份备受关注的微信小程序功能正式上线了,好多知名平台纷纷推出了自己的微信小程序,例如大众点评.美团外卖.京东购物.对于我们爬虫开发者来说这绝对是好事情,意味着又多了一个数据来源,又多了一种 ...
- 微信小程序observers数据监听器的使用
微信小程序observers数据监听器的使用 数据监听器可以用于监听和响应任何属性和数据字段的变化. 1.observers使用的前提条件 在微信小程序中数据监听器的使用是有几个前提条件的,否则是无法 ...
最新文章
- 在ireport报错 报 jdk5找不到的解决办法
- Go 语言 2019 调查报告发布(内含 Go 语言图谱下载)
- Bzoj1269 [AHOI2006]文本编辑器editor
- jdk11换jdk8版本_在JDK 9(以及8)以及更高版本中,所有内容都可以作为一个流
- [WCF] - 使用 [DataMember] 标记的数据契约需要声明 Set 方法
- JAVA NIO 简介(转)
- python画k线图_Python绘制K线图
- Ajax核心:XMLHTTP组件相关技术资料
- javascript学习指南,javascript自学要多久
- 关掉EMOS的反病毒及反垃圾服务。
- 守望先锋等FPS游戏的网络同步
- 小学生计算题生成器的python实现
- 修改db_create_file_dest
- 电商品牌私域流量社群运营推广裂变sop搭建营销计划表格方案
- 《那些年啊,那些事——一个程序员的奋斗史》——94
- ****you do not have the permissions necessary t...
- 抖音同款口红机 微信口红机 在线游戏口红机开发代码 分析
- 新书字码的差不多了,想众包几个事情
- 大学计算机软件破解版,大学理工科学计算器
- 3D坐标轴下画一个姿态、位置可调整的圆柱体