前端无法读取云数据库集合中的的所有记录
发布于 5 年前 作者 nqian 8783 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

您好,我们在读云数据库中某个集合的所有记录(我们的例子集合的记录有60条)时,发现求集合总数的代码段 总是 在 实际循环读取记录(云平台规定每次只能读20条记录)的后面,这样就使得计算读多少次失去了意义;另外发现循环读的时候,skip(0)报错误,代码如下。

        const db1 = wx.cloud.database()

        const MAX_LIMIT = 20

        // 先取出集合记录总数

        db1.collection(‘BSDX3S1D1KZC’).count().then(res => {

          this.setData({

              wordnum1: res.total

            }),

            console.log(res.total)

        })

        wordnum = this.data.wordnum1

        // 计算需分几次取

        const batchTimes = Math.ceil(wordnum / MAX_LIMIT)

       //读取第一个20条记录

        db1.collection(‘BSDX3S1D1KZC’).get({

          success: res => {

            // res.data 包含该记录的数据

            console.log(res)

          },

          fail: err => {

            cosole.log(err)

          }

        })

 

//循环读取第2~3个 20条记录

        for (let i = 1; i < 3; i++) { //3应该为batchTimes

          var skipnum = i * MAX_LIMIT

          db1.collection(‘BSDX3S1D1KZC’).skip(skipnum)

            .get({

              success: res => {

                // res.data 包含该记录的数据

                console.log(res)

              },

              fail: err => {

                cosole.log(err)

              }

            })

        }

  • 希望提供的能力

请问,

1 怎样才能使得"先取出集合记录总数"的代码  在 “读取第一个20条记录”,和循环读取第2~3个 20条记录” 的代码  之前 执行,这样保证循环数 batchTimes能够提前算出来?

        2 怎样防止skip(0)出错,使得  “读取第一个20条记录”,和循环读取第2~3个 20条记录” 的代码能合并在一个循环里?

3 回复
  1. 可以把计算和下面的操作都放到一个方法里,然后在获取总条数之后调用,

  2. db1.collection('BSDX3S1D1KZC').skip(0).limit(20).get(),这里的skip不能为0,如果想取前20条,可以直接db1.collection('BSDX3S1D1KZC').limit(20).get()这样取就好了,在循环里加个if判断如果i==1的话执行db1.collection('BSDX3S1D1KZC').limit(20).get()如果不等于1就执行db1.collection('BSDX3S1D1KZC').skip(skipnum).limit(20).get()

谢谢您帮助。试验

db1.collection('BSDX3S1D1KZC').skip(0).limit(60).get()

.then(console.log)

.catch(console.error)

提示:


VM1004:1 thirdScriptError

errCode: -401002 api parameter error | errMsg: parameter offset of function skip must be provided;at pages/WordTest/WordTest page lifeCycleMethod onLoad function

Error: errCode: -401002 api parameter error | errMsg: parameter offset of function skip must be provided

    at new t (http://127.0.0.1:45447/appservice/__dev__/WAService.js:22:14994)

    at Object.i [as assertRequiredParam] (http://127.0.0.1:45447/appservice/__dev__/WAService.js:22:13547)

    at t.e.skip (http://127.0.0.1:45447/appservice/__dev__/WAService.js:21:9208)

    at t.onLoad (http://127.0.0.1:45447/appservice/pages/WordTest/WordTest.js:157:40)

    at t.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:13907)

    at $t (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:30369)

    at Zt (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:31040)

    at sn (http://127.0.0.1:45447/appservice/__dev__/WAService.js:20:469)

    at Function.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:20:3006)

    at L.<anonymous> (http://127.0.0.1:45447/appservice/__dev__/WAService.js:19:1500)

如果将skip(0)修改为skip(1),即

db1.collection(‘BSDX3S1D1KZC’).skip(1).limit(60).get()

.then(console.log)

.catch(console.error)

读出来的 只有20条记录,无法全读出

{data: Array(20), errMsg: “collection.get:ok”}

请您再帮助看下,谢谢!

db1.collection('BSDX3S1D1KZC').skip(0).limit(60).get()

一次全部读出来就可以了

回到顶部