Запрос ReactiveMongo для подсчета документов

scala #reactivemongo #play-reactivemongo

#scala #reactivemongo #воспроизведение-reactivemongo

Вопрос:

У меня проблемный запрос mongo. Проблематично, потому что это занимает 10-12 секунд, и именно поэтому я ищу другую реализацию.

Запрос пытается выполнить подсчет количества элементов в коллекции. Я уверен, что есть лучший способ выполнить подсчет.

Текущая реализация:

 def count(criteria: Option[JsObject], skip: Int, limit: Option[Int]): Future[Long] =
    (for {
      col     <- collection
      counted <- col.count(
        selector = criteria,
        limit = limit,
        skip = skip,
        hint = None,
        readConcern = ReadConcern.Majority
      )
    } yield counted) recoverWith {
      case error =>
        logger.error(
          s"failed to count by [${criteria.getOrElse(JsObject.empty)}]"  
          s" with error: [${error.getMessage}]"
        , error)
        Future.failed(MongoExceptionBuilder.buildError(error))
    }
 

Я просмотрел документацию и нашел команду aggregateWith, которая могла бы взаимодействовать с функцией подсчета. Я попытался реализовать это на себе, но мне это не удалось.
http://reactivemongo.org/releases/0.1x/documentation/advanced-topics/aggregation.html#count

   def count(criteria: Option[JsObject], skip: Int, limit: Option[Int]): Future[Long] =
(for {
  col     <- collection
  counted <- col.aggregateWith[Long]() { framework =>
    import framework.{Count, Group, Match}

    (Match(criteria.getOrElse(JsObject.empty)),List(Count("count")))
  }.head
} yield counted) recoverWith {
  case error =>
    logger.error(
      s"failed to count by [${criteria.getOrElse(JsObject.empty)}]"  
      s" with error: [${error.getMessage}]"
    , error)
    Future.failed(MongoExceptionBuilder.buildError(error))
}
 

Ошибка, которую я вижу:

lt-dispatcher-4 c.i.d.c.c.m.PlayerProfileDAOapplyOrElse(строка:95) не удалось выполнить подсчет по [{}] с ошибкой: [JsResultException(errors:List((,List(JsonValidationError(List(error.expected.jsnumber),WrappedArray())))))] play.api.libs.json.Исключение JsResultException: JsResultException(errors:List((,List(JsonValidationError(List(error.expected.jsnumber),WrappedArray())))))

Комментарии:

1. Попробуйте последнюю версию