收藏
回答

想请问一下各位大佬,怎么去解决这个导出只有100条数据的问题(实际数据库有1500条)?

const cloud = require('wx-server-sdk')

cloud.init({

  env: "cloud1-1g7rev901677259f"   //编写云开发环境

})

const xlsx = require('node-xlsx')    //导入Excel类库

const db = cloud.database()   //声明数据库对象

const _ = db.command

exports.main = async (event, context) => {   //主函数入口

  try {

    //将获取到的数据对象赋值给变量,接下来需要用该对象向Excel表中添加数据

    let StuInfo = await db.collection('stuList').get()

    let dataCVS = `studentInfo-${Math.floor(Math.random() * 1000000000)}.xlsx`

    //声明一个Excel表,表的名字用随机数产生

    let alldata = [];

    let row = ['学号', '姓名', '班级', '联系方式', '身份证号码', '五大定制班', '课程时间', '课程时间', '课程时间','课程时间', '课程时间', '课程时间', '课程时间','课程时间']; //表格的属性,也就是表头说明对象

    alldata.push(row);  //将此行数据添加到一个向表格中存数据的数组中

    //接下来是通过循环将数据存到向表格中存数据的数组中

    for (let key = 0; key < StuInfo.data.length; key++{

      let arr = [];

      arr.push(StuInfo.data[key].stuNum);

      arr.push(StuInfo.data[key].stuName);

      arr.push(StuInfo.data[key].stuClass);

      arr.push(StuInfo.data[key].stuShou);

      arr.push(StuInfo.data[key].stunumId);

      arr.push(StuInfo.data[key].fiveClass);

      for (let i = 0; i < StuInfo.data[key].lessontable.length; i++{

        var lessonArr =[];

        lessonArr.push(StuInfo.data[key].lessontable[i].lesson+"-"+StuInfo.data[key].lessontable[i].week+"-"+StuInfo.data[key].lessontable[i].knob);

        arr.push(lessonArr)

      }

      alldata.push(arr)

    }

    var buffer = await xlsx.build([{

      name: "定制班学员信息",

      data: alldata

    }]);

    //将表格存入到存储库中并返回文件ID

    return await cloud.uploadFile({

      cloudPath: dataCVS,

      fileContent: buffer, //excel二进制文件

    })

  } catch (error{

    console.error(error)

  }

}


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

2 个回答

  • 张锦城
    张锦城
    2023-03-21

    数据1500条呢?如果2万条呢?

    这就涉及到

    1、读取数据一次性读取多少条,云函数1-1000可以选择 :limit(1000)

    2、从哪里开始读,skip(n),

    3、每次读出来的数据合并:concat()

    4、如果不要数据按照orderBy()顺序读出,那么就不用await ,直接用for循环,全部读出来后数据合并。

                        const xlsx = require('node-xlsx')

                        const db = cloud.database()

                        const _ = db.command

                        let StuInfo1 = await db.collection(event.table)

                        .where({user_hd:event.search3},)

                            .count()

                            let large = 1000

                            let list = []

                            let StuInfo2 = []

                            let count1 = StuInfo1.total

                            for (let i = 0; i < count1; i += large{

                                let StuInfo = await db.collection(event.table)

    .where({user_hd:event.search3},)

                                  .orderBy('projcet', 'asc')

                                    .limit(large)

                                    .skip(i)

                                    .get()

                                    list = list.concat(StuInfo.data);

                                    if (list.length == count1{

                                      StuInfo2=list

                                    }

                        }

                        console.log(StuInfo2)


    2023-03-21
    有用 2
    回复 1
    • 🐏
      🐏
      发表于移动端
      2023-03-21
      谢谢大佬,已解决,感谢
      2023-03-21
      回复
  • showms
    showms
    2023-03-21

    排序分页导呗,每次导出记录一下上一次最后一条的ID呗

    2023-03-21
    有用
    回复
登录 后发表内容