この例を見つけました...しかし、コレクションから1 つのドキュメントをランダムに選択する方法を示していますが、複数のドキュメントをできるだけ効率的に選択する必要があります。
質問する
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 (これがページ サイズ) を掛けて、ページ数を決定します。最後に、ランダムに 1 ページを選択し、結果をシャッフルします。
お役に立てば幸いです。
于 2015-09-26T12:40:22.827 に答える