评论

如何突破一次只能获取20条记录的limit限制?只需要一行代码。

云开发数据库每次只能拉取最多100条记录(云端1000),但是碰到需要一次性拉取大数量记录的情况,怎么办?一句代码即可。

笔者刚遇到需要一次性拉取超过100条(云函数里超过1000条)记录的这种需求。

一般情况下,会有下面两种处理方式:

1、先获取总数,再for循环,每次拉取limit条记录;(可结合Promise.all并发)

2、递归拉取,每次拉取limit条记录,直到拉取的记录数量小于limit。

以上两种方式都比较麻烦,于是动了一脑筋,以最简单的方式实现上面的需求。

极简代码如下:

    db.collection('order').aggregate()
    .match({
      status:'已付费'
    })
    .addFields({
      tempTag:1 //增加一个临时标签;也可以不要addFields这个阶段;
    })
    .group({
      _id:'$tempTag',
      orders:$.push('$$ROOT') //一次性拉取超过100条或者1000条记录
    })
    .end()
    .then(res=>{
      let orders = res.list[0].orders
      console.log(orders)
    })

一个临时标签,搞定。

小心数据量太大搞崩了,崩溃的极限是多少,需要各位自行摸索了。

需要注意的是,如果是云函数里执行以上代码(比如lookup),返回小程序端的数据量不要超过1M。

最后一次编辑于  03-15  
点赞 5
收藏
评论

3 个评论

  • 赵正
    赵正
    10-29

    我试了,我这里不管用啊。还是输出20条记录。

    添加了

        .addFields({

          tempTag:1 //增加一个临时标签;也可以不要addFields这个阶段;

        })


    10-29
    赞同
    回复 1
    • 赵正
      赵正
      10-29
      没用 group ,只有lookup
      10-29
      回复
  • 呵呵
    呵呵
    08-16


    老师,不行啊


    08-16
    赞同
    回复 2
    • 老张
      老张
      08-16
      抄都不会抄的话,我没办法了。aggregate呢?先去补补基础课,这是高级功能。
      08-16
      回复
    • 呵呵
      呵呵
      08-18回复老张
      有啊
      08-18
      回复
  • yangxuqing
    yangxuqing
    06-29

    挺有用,收藏以备查阅

    06-29
    赞同
    回复
登录 后发表内容