收藏
回答

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

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 个回答

  • Tony
    Tony
    2019-10-20

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


    2019-10-20
    有用 1
    回复
  • 老张
    老张
    2019-10-21

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

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

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

    2019-10-21
    有用
    回复 2
    • Tony
      Tony
      2019-10-21
      小程序开发团队真的要努力啊,都逼开发者用到这招了。。我说的问题已经通过limit参数解决了。
      2019-10-21
      回复
    • 老张
      老张
      2019-10-21回复Tony
      limit你居然也不试一下先的吗?汗。
      2019-10-21
      回复
  • 李东bbsky
    李东bbsky
    2019-10-20
    为了性能考虑,小程序端调数据默认会有一个limit上限是20条,这个限制也是最高限制,不可解除。 要想把所有数据取出来可以结合skip来遍历(常用于分页);也可以使用Promise.all来取出所有数据(取出数据,用js来处理数据的逻辑,而不是让数据库命令来处理,适合数据逻辑比较复杂的情况,用js性能会更佳)
    2019-10-20
    有用
    回复
登录 后发表内容
问题标签