【问题标题】:ReactiveMongo: How to select more than one document from a collection randomly?ReactiveMongo:如何从集合中随机选择多个文档?
【发布时间】:2015-09-26 20:40:22
【问题描述】:

我找到了 this 示例...但它显示了如何从集合中随机选择 一个 文档,而我需要尽可能高效地选择多个文档。

【问题讨论】:

    标签: mongodb reactivemongo play-reactivemongo


    【解决方案1】:

    下面是我的解决方案:

    def listRandom(selector: JsValue, resNum: Int): Future[List[User]] = {    
      userService.count(selector).flatMap {
        case n if n > 0 =>
          val perPage = resNum * 10
          val randomPage = Random.nextInt(math.max(1, n / perPage))
          context.find(selector, None, None, randomPage, perPage).map { users =>
            Random.shuffle(users) take resNum
          }
       case _ => Future.successful(Seq.empty[User])
      }
    }
    

    listRandom 接受一个选择器和一个Int,指定应该返回多少个结果。

    首先它确定集合实际包含多少文档;然后它将 resNum 乘以 10(这是页面大小)并确定页面数。最后,它随机选择一页并将结果打乱。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2022-09-30
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多