以下是使用Mongo的FindAndModify
:
val selector = BSONDocument("id" -> "1234")
val modifier = BSONDocument("$set" -> BSONDocument("email" -> "new@domain.com"))
ReactiveMongoPlugin.db.command(FindAndModify(
collection.name,
selector,
Update(modifier, false),
false,
None
)).transform(
success => success.map { s =>
// doesn't work...
Json.fromJson[Seq[JsValue]](toJson(s)).map(for (item <- _) yield item).get
}.getOrElse(List[JsValue]()),
failure => failure match {
case e: LastError => DaoServiceException(e.message, Some(DATABASE_ERROR))
}
)
在success
块中,我正在尝试将返回的BSONDocument
集合转换为JsValue
集合...但它不起作用,结果为JsValue
集合总是空的(我已经验证了命令返回的BSONDocument
集合,并确认它是非空)。我错过了什么吗?
答案 0 :(得分:9)
BSON处理程序含义(在评论中建议)可能不起作用,因为FindAndModify命令具有严格签名以返回Option[BSONDocument]
FindAndModify extends BSONCommandResultMaker[Option[BSONDocument]]
如果返回的结果是Future[Option[BSONDocument]]
类型
您可以导入json格式
import play.modules.reactivemongo.json.BSONFormats._
并申请
result.map(docOpt => docOpt.map(d => Json.toJson(d)))
结果,或直接调用转换
import play.modules.reactivemongo.json.BSONFormats
result.map(docOpt => docOpt.map(d =>
BSONFormats.BSONDocumentFormat.writes(d).as[JsObject]))