Я пытаюсь реализовать разбиение на страницы с помощью Reactive Mongo.
def get(page: Int, pageSize: Int, filter: JsObject = Json.obj()): Future[Seq[Thing]] = {
val actualPage = if(page > 1) page else 1
collection
.find(filter)
.options(QueryOpts(skipN = (actualPage - 1) * pageSize, batchSizeN = pageSize))
.cursor[Thing]()
.collect[Seq](pageSize, Cursor.FailOnError[Seq[Thing]]())
}
Это работает и возвращает мне последовательность фильтрации документов по page
и pageSize
.Проблема в том, что я понятия не имею, сколько результатов соответствует указанному запросу, поэтому я не могу сказать, сколько существует page
.
Есть ли способ, которым я также могу получить $count
как частьтот же запрос?Или мне нужно обратиться к базе данных во второй раз с помощью приведенного ниже?
collection.count(filter)
В идеале я бы изменил свой тип возвращаемого значения на Future[Page[Seq[Thing]]]
, где Page
будет содержать общее количество результатов.например,
case class Page[T](results: Seq[T], count: Int)