播放2.1和reactivemongo 0.8计数文件

时间:2013-08-04 14:04:42

标签: json mongodb playframework playframework-2.1 reactivemongo

我有通过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

有人能告诉我如何计算元素值等于指定值的所有文档?

1 个答案:

答案 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