微信小程序读取数据超过20,100的限制方法

本文介绍了解决小程序端与云函数单次读取数据库数量限制的方法,通过分解查询、循环获取并组合数据,实现高效读取大量数据的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,无论小程序端单次读取数据库最多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 = res
      let 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("查询失败")
          })
      }
    })
 })
微信小程序想要读取蓝牙低功耗 (BLE) 的广播数据,通常需要使用第三方库或微信提供的API,因为微信小程序本身的API并未直接支持BLE。具体步骤可能会涉及以下几个部分: 1. **权限申请**:首先,你需要在小程序的manifest.json文件中添加对蓝牙的权限请求,用户同意后才能操作。 ```json { "permissions": { "scope.bluetoothLowEnergyRead": { "desc": "用于蓝牙低功耗设备扫描" } }, ... } ``` 2. **初始化蓝牙**:使用微信提供的wx.startBleScan()函数开始扫描BLE设备,传入配置选项如扫描范围、过滤条件等。 ```javascript wx.startBleScan({ serviceDataList: [], // 需要的服务UUID列表 success: function(res) { console.log('扫描开始'); }, fail: function(err) { console.error('扫描失败', err); } }); ``` 3. **监听事件**:当接收到BLE广播数据时,会触发scanResult事件,其中包含了设备的信息以及广告数据(包括ADTYPE_MANUFACTURER_SPECIFIC)。 ```javascript wx.onBleScanResult(function(scanResult) { var ad = scanResult.advertisementData; if (ad.adType === GAP_ADTYPE_MANUFACTURER_SPECIFIC) { // 解析并处理自定义数据 } }); ``` 4. **解析数据**:由于是自定义数据,可能需要自行解析那两个公司的标识代码和后续的制造商特定数据。 请注意,实际操作中可能需要根据具体的第三方库或SDK来进行上述步骤,因为微信小程序提供的API可能会有所限制。在使用过程中,务必遵循微信小程序的相关规定和文档。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值