收藏
回答

怎么突破wx.cloud.database().collection函数最多拿到20个数据的限制?

1) 需求:

在调试的时候发现,通过wx.cloud.database().collection函数最多只能渠道云数据库前20条数据。我的需求是希望能够取到云数据库的全部数据,30w~100w量级,网上查资料,看了下官方文档。有以下代码:

2) 代码:

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
  // 先取出集合记录总数
  const countResult = await db.collection('todos').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('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {
    return {
      data: acc.data.concat(cur.data),
      errMsg: acc.errMsg,
    }
  })
}

3)

① 我能否在index.js中输入上方代码(按需变动),而不是在app.js中?

② 以上代码做相关参数替换匹配我自己的实际场景后,能否实现取出当前数据库下所有的数据(30w~100w量级)?

回答关注问题邀请回答
收藏

1 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-04-26

    一次性取出那么多数据?导出功能?

    2020-04-26
    有用 1
    回复 9
    • Jeremy
      Jeremy
      2020-04-26
      取这么多数据做校验,和我从前端输入的数据做校验,然后取出特定数据中的其中一个参数值。
      2020-04-26
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-04-26回复Jeremy
      取出全部做校验?你直接用前端输入的数据查询不就好了
      2020-04-26
      回复
    • Jeremy
      Jeremy
      2020-04-26回复o0o有脾气的酸奶
      我理解是,我前端拿到了数据,要给数据库的存储的每一个数据具体数据项去比对,比对匹配,拿到该数据另一个指定数据项的值,否则继续下一个数据项的比对。按照这个逻辑,应该是要从代码层面试图拿出云数据库所有的数据吧?
      2020-04-26
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-04-26回复Jeremy
      举个例子?
      2020-04-26
      回复
    • Jeremy
      Jeremy
      2020-04-26回复o0o有脾气的酸奶
      比如,我前端输入了某个数据项,在云数据库存储10w个数据中找到这个数据项,然后返回该数据项所在数据的另一个字段的值
      2020-04-26
      回复
    查看更多(4)
登录 后发表内容
问题标签