我找到了这个例子......但它展示了如何从集合中随机选择一个文档,而我需要尽可能高效地选择多个文档。
问问题
94 次
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
指定应该返回多少结果的一个。
首先,它确定集合实际包含多少文档;然后它乘以resNum
10(这是页面大小)并确定页数。最后,它随机选择一页并将结果打乱。
我希望它有所帮助。
于 2015-09-26T12:40:22.827 回答