0

この例を見つけました...しかし、コレクションから1 つのドキュメントをランダムに選択する方法を示していますが、複数のドキュメントをできるだけ効率的に選択する必要があります。

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返される結果の数を指定する を受け取ります。

最初に、コレクションに実際に含まれるドキュメントの数を決定します。resNum次に、10 (これがページ サイズ) を掛けて、ページ数を決定します。最後に、ランダムに 1 ページを選択し、結果をシャッフルします。

お役に立てば幸いです。

于 2015-09-26T12:40:22.827 に答える