我使用最新的反应式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()
}
但是不幸的是这里没有计数……您将如何做?
答案 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))
此函数将以Future
中List[User]
的形式返回查询结果。因此,我们应该在函数调用后使用.map
来解析 Future 结果,然后获取其大小。
我已使用 ReactiveMongo 版本0.16.2
测试了此代码。希望它也可以与0.17.1
一起使用。