0

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

4

1 回答 1

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指定应该返回多少结果的一个。

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

我希望它有所帮助。

于 2015-09-26T12:40:22.827 回答