【发布时间】:2015-09-26 20:40:22
【问题描述】:
我找到了 this 示例...但它显示了如何从集合中随机选择 一个 文档,而我需要尽可能高效地选择多个文档。
【问题讨论】:
标签: mongodb reactivemongo play-reactivemongo
我找到了 this 示例...但它显示了如何从集合中随机选择 一个 文档,而我需要尽可能高效地选择多个文档。
【问题讨论】:
标签: mongodb reactivemongo play-reactivemongo
下面是我的解决方案:
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(这是页面大小)并确定页面数。最后,它随机选择一页并将结果打乱。
希望对你有帮助。
【讨论】: