繁体   English   中英

ReactiveMongo:如何使用投影

[英]ReactiveMongo: How to use projection

我正在尝试使用ReactiveMongo从MongoDB查询文档时过滤掉password字段:

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字段。 如果我从mongo客户端尝试以下操作,那么它的工作原理和password不会返回:

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

我错过了什么吗?

这是解决方案:

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))
    }
  )
}

我希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM