ReactiveMongo:如何从集合中随机 select 多个文档?

ReactiveMongo: How to select more than one document from a collection randomly?

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

下面是我的解决方案:

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(这是页面大小)并确定页面数。最后,它随机选择一页并对结果进行洗牌。

希望对您有所帮助。