使用reactivemongo来计算查询结果的文档数量(播放2.7和scala 2.12)

时间:2019-07-03 12:11:19

标签: scala playframework reactivemongo play-reactivemongo

我使用最新的反应式mongo播放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 :(得分:0)

如何使用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))

此函数将以FutureList[User]的形式返回查询结果。因此,我们应该在函数调用后使用.map来解析 Future 结果,然后获取其大小。

我已使用 ReactiveMongo 版本0.16.2测试了此代码。希望它也可以与0.17.1一起使用。