2014-02-21 68 views
2

我試圖篩選出查詢從MongoDB的文檔與ReactiveMongo當password領域:ReactiveMongo:如何使用投影

val projection = Json.obj("password" -> 0) 

def find(selector: JsValue, projection: Option[JsValue]) = { 
    val query = collection.genericQueryBuilder.query(selector) 
    projection.map(query.projection(_)) 
    query.cursor[JsValue].collect[Vector](perPage).transform(
    success => success, 
    failure => failure match { 
     case e: LastError => DaoException(e.message, Some(DATABASE_ERROR)) 
    } 
) 
} 

上面的代碼沒有任何影響。我也得到了password場。如果我嘗試從蒙戈客戶端的操作,那麼它的工作原理和password沒有返回:

db.users.find({ username: 'j3d' }, { password:0}) 

我缺少的東西?

回答

2

這裏是解決方案:

def find(selector: JsValue, projection: Option[JsValue]) = { 
    var query = collection.genericQueryBuilder.query(selector) 
    projection.map(query = query.projection(_)) 

    query.cursor[JsValue].collect[Vector](perPage).transform(
    success => success, 
    failure => failure match { 
     case e: LastError => DaoException(e.message, Some(DATABASE_ERROR)) 
    } 
) 
} 

或者:

def find(selector: JsValue, projection: Option[JsValue]) = { 
    val query = collection.genericQueryBuilder 
    .query(selector) 
    .projection(projection.getOrElse(Json.obj()) 

    query.cursor[JsValue].collect[Vector](perPage).transform(
    success => success, 
    failure => failure match { 
     case e: LastError => DaoException(e.message, Some(DATABASE_ERROR)) 
    } 
) 
} 

我希望幫助。