微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

微信小程序 - 云开发data exceed max size 解决方案

在使用云开发时,对单个字段是数组类型的数据进行更新操作时,报了一个错(只在真机出现),data exceed max size,因为小程序对单个字段的数据进行提交或者更新时,对数据的大小有限制,错误信息里也没有提示具体上限多少,最终对提交的数据进行拆分,改为多个请求进行提交

相关报错文章
小程序云开发:data exceed max size 解决方案

解决方案:

1.先对要提交的数据根据长度进行拆分,看需要进行几次更新操作
2.根据数据id查询有没有这条数据,有了进行更新操作,在原数组后追加更新的数据,没有的话进行新增

对应使用的云开发数组更新方法

开发者资源 /SDK 文档 /数据库 /Command /更新·数组操作符 /push

Command.push(values: Object): Command
支持端:小程序 2.8.3, 云函数 1.2.1, Web
数组更新操作符。对一个值为数组的字段,往数组添加一个或多个值。或字段原为空,则创建该字段并设数组为传入值

示例 1:尾部添加元素

const _ = db.command
db.collection('todos').doc('doc-id').update({
  data: {
    tags: _.push(['mini-program', 'cloud'])
  }
})
// 根据长度n把数组拆分成n个小数组
function splitArrayByLength(array, subGroupLength) {
  let index = 0;
  let newArray = [];
  while(index < array.length) {
      newArray.push(array.slice(index, index += subGroupLength));
  }
  return newArray;
}
//提交数据
function submitData(params, dataArr, openId) {
  const tasks = []
  // const promise = DataManager.addOrUpdateData(dataArr, openId) // 单个更新报错,长度超限,废弃
  // tasks.push(promise)
  
  var tempArr = splitArrayByLength(dataArr, 50); // 50个分为一组
  for (let index = 0; index < tempArr.length; index++) {
   let promise =  DataManager.addOrUpdateData(tempArr[index], openId)
   tasks.push(promise)
  }
  return Promise.all(tasks).then(res => {
    return res
  }).catch(function (err) {
    return err
  })
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐