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(这是页面大小)并确定页面数。最后,它随机选择一页并对结果进行洗牌。
希望对您有所帮助。
我找到了 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(这是页面大小)并确定页面数。最后,它随机选择一页并对结果进行洗牌。
希望对您有所帮助。