подсчитать количество документов в результате запроса с responsetivemongo (play 2.7 и scala 2.12) - PullRequest
0 голосов
/ 03 июля 2019

я использую новейшие реактивные монго для игры 2.7 и scala 2.12:

"org.reactivemongo" % "play2-reactivemongo_2.12" % "0.17.1-play27"

и я хочу создать запрос на поиск и подсчитать количество документов, возвращаемых по этому запросу ...

что-то вроде:

def countEntriesForReport(reportId: String) = {
    collection.find( Json.obj("reportId" -> reportId), Option.empty[BSONDocument]).count()
  }

но, к сожалению, здесь нет счета ... как бы вы это сделали?

1 Ответ

0 голосов
/ 10 июля 2019

Как насчет использования Cursor?

Я думаю, что это решит вашу проблему:

  def countEntriesForReport(reportId: String): Future[List[User]] = {
    // the cursor of documents
    val found = collection.map(_.find(selector = Json.obj("reportId" -> reportId),
      projection = Option.empty[BSONDocument]).cursor[User]())

    // build (asynchronously) a list containing all of the users
    found.flatMap(_.collect[List](-1, Cursor.FailOnError[List[User]]()))
  }

// Now using the function
countEntriesForReport("85").map(list => println("Count: " + list.size))

Эта функция вернет результат запроса в виде Future изList[User].Поэтому мы должны использовать .map после вызова функции, чтобы разрешить результат Future и затем получить его размер.

Я тестировал этот код с ReactiveMongo version 0.16.2.Надеюсь, это будет работать и с 0.17.1.

...