小程序云开发数据库函数Sample是否有20条记录数量限制?
发布于 7 年前 作者 xiaming 14923 次浏览 来自 官方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 回复

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

已通过添加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,符合预期。

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

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

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

回到顶部