小程序云开发:data exceed max size 解决方案
发布于 4 年前 作者 gang75 779 次浏览 来自 分享

说现象

前两天有客服消息说我的小程序无法进行正常功能的使用了,后来定位到问题了,在 update 的时候出现错误信息:data exceed max size。

并且这个错误还开发工具上不出现,只有在手机上才出现。原因是 update 的字段内容太大了导致无法正常修改,那么我们要做的就是让参数变小。

分析问题


这个小程序是实现的是投票功能,有多层嵌套,之前的更新方案是直接修改 optionData 里面的所有内容。

数据结构解释:
optionData 是一个数组里面存储选项数据
optionData 下面还有一个joiner数据组,这个是存放用户投票信息的。

optionData内容过大导致报错,解决方案是通过只更新局部来解决。

上代码

没改之前的代码


let vote = await db.collection('activity').doc(event.id).update({
      data:{
        optionData:event.optionData
      }
    })

优化后的代码


  let vote = await db.collection('activity').doc(event.id).update({
      data:{
        ['optionData.'+ joiner.index +'.joiner']:_.push(event.userInfo)
      }
    })

总结

很多bug当数据量小的时候问题并不会暴露出来,数据一旦大起来问题就来了。本质上反应出一个问题就是从数据结构的设计上这个就是不合理的,不应该所有数据都存放在一个大字段里面,应该做数据拆分,然后通过联查来展示,这样更加便于后续的数据分析与统计。

最后,感谢 @老张 的指点。

后记

还有一种情况也会出现 data exceed max size ,查询数据过大。
有两种解决方案:

  1. 查询通过过滤一些无关字段。
    1.1 聚合查询使用「project」进行过滤
    1.2 普通查询使用「field」进行过滤
  2. 分页查询。
    详细查看「云开发:实现分页功能

以上两种方式本质上都是减少一次性的查询数据量。

回到顶部