小程序云开发数据库函数Sample是否有20条记录数量限制?

发布于 8 年前作者 xiaming15056 次浏览最后编辑 8 年前来自 issues

const type1Subs = await db.collection('subject').aggregate()
      .match({exam_id:exam_id,type:1})
      .sample({
        size: 40
      })     })
console.log(type1Subs.list.length)  //云函数后台打印日志这个只有 20

调用代码如上,随机取40条记录,但是返回的记录只有20条。本人确认符合条件的数据超过40条。请问小程序云开发数据库函数Sample是否有20条记录数量限制?如有,请问如何解决?

3 回复
yinfang
yinfang1 楼6 年前

为了性能考虑,小程序端调数据默认会有一个limit上限是20条,这个限制也是最高限制,不可解除。 要想把所有数据取出来可以结合skip来遍历(常用于分页);也可以使用Promise.all来取出所有数据(取出数据,用js来处理数据的逻辑,而不是让数据库命令来处理,适合数据逻辑比较复杂的情况,用js性能会更佳)

junbai
junbai2 楼6 年前

已通过添加limit参数解决该问题。但是个人仍觉得这个设计逻辑有点诡异。

const type1Subs = await db.collection('subject').aggregate()
      .match({exam_id:exam_id,type:1})
      .sample({
        size: 40
      })
      .limit(40)
    })
console.log(type1Subs.list.length)  //云函数后台打印日志值为 40,符合预期。

juanfan
juanfan3 楼6 年前

你想要的结果,暂时还想不出解决办法。

1、将就一下,就20条呗。

2、如果非要凑齐40条的话,换我的话,只能多随机几次,把几次结果合在一起,通过js去重,再随机40条。