2

MongoDB을 통해 Reactivemongo 0.8 plugin을 사용하는 Play 2.1 앱을 보유하고 있습니다. 내 응용 프로그램에서 나는 aproach 사용 모델Play 2.1 및 reactivemongo 0.8 카운트 문서

내가 "유형"잘 작동 예를 {"type": "computer"}에 대한 기능 getTypeAll에 getType로 매개 변수를 동일하여 MongoDB에서 모든 문서를 반환하는 방법이없이 here를 설명 사용합니다.

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) }로 기록되고 문제는 내가 "유형"같은 매개 변수와 동일한 경우 문서의 수를 얻을 것이다 방법을 쓸 수 아니라고이다

lazy val collection = db("mycollection")으로 발 수집 정의된다.

def countTypeAll(getType: String) = Action { 

} 

및 { "typecount": 45}과 같은 JSON으로 반환 내가 발견 된 모든 예에 있지만 성공하지 찾고 있었다

. 나는 내가 원하는 것은 val c = collection.find[JsValue](q).count()

같은이라고 생각하지만 value size is not a member of reactivemongo.api.DefaultCollection

아무도 요소의 값이 값을 지정 일치 한 모든 문서를 계산하는 방법을 말해 줄 수 없다는 오류를 준다?

답변

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으로 변환 할 수 있습니다.