我有通过MongoDB
使用Reactivemongo 0.8 plugin
的Play 2.1应用。在我的应用中,我使用 here 描述的aproach而不使用模型
我有从mongodb返回所有文件的方法,其中“type”等于函数getTypeAll中的getType参数,例如{"type": "computer"}
,它可以正常工作。
def getTypeAll(getType: String) = Action {
val validatedType = getType.replaceAll("-"," ")
val q = QueryBuilder().query(toType.writes(validatedType))
Async {
val f = collection.find[JsValue](q)
f.toList.map{
jsonp =>
Ok( Json.toJson(jsonp) )
}
}
}
toType写为val toType = OWrites[String]{ s => Json.obj("type" -> s) }
,val集合定义为lazy val collection = db("mycollection")
问题是我无法编写方法来获取“type”等于相同参数的文档的数量。
def countTypeAll(getType: String) = Action {
}
并将其作为json返回{{typecount“:45}
我正在查看我发现的每个例子,但没有成功。我认为我想要的是val c = collection.find[JsValue](q).count()
但错误地说value size is not a member of reactivemongo.api.DefaultCollection
有人能告诉我如何计算元素值等于指定值的所有文档?
答案 0 :(得分:5)
使用ReactiveMongo 0.8,您必须使用Count
命令来实现这一目标。
val futureCount = db.command(Count(collection.name, Some(BSONDocument("type" -> BSONString(s)))))
futureCount.map { count => // count is an Int
// do some stuff
}
但是没有办法直接给它一个JSON文档。但是,如果您不想自己编写BSONDocument,则可以将JSON文档明确转换为BSONDocument
。