笔者刚遇到需要一次性拉取超过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。
请问一下,如果超过1M,怎么处理呢?好像云开发后台都崩溃了。。。
我试了,我这里不管用啊。还是输出20条记录。
添加了
.addFields({
tempTag:1 //增加一个临时标签;也可以不要addFields这个阶段;
})
老师,不行啊
挺有用,收藏以备查阅