j3d*_*j3d 2 scala mongodb reactivemongo
下面是使用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))
}
)
Run Code Online (Sandbox Code Playgroud)
在success块我试图将返回的BSONDocument集合转换为JsValue集合...但它不起作用,结果JsValue集合总是空的(我已经验证BSONDocument了命令返回的集合,我确认它是非空的).我错过了什么吗?
BSON处理程序含义(在注释中建议)可能不起作用,因为FindAndModify命令具有要返回的严格签名 Option[BSONDocument]
FindAndModify extends BSONCommandResultMaker[Option[BSONDocument]]
Run Code Online (Sandbox Code Playgroud)
给定返回的结果是Future[Option[BSONDocument]]类型
你可以导入json格式
import play.modules.reactivemongo.json.BSONFormats._
Run Code Online (Sandbox Code Playgroud)
并申请
result.map(docOpt => docOpt.map(d => Json.toJson(d)))
Run Code Online (Sandbox Code Playgroud)
结果,或直接调用转换
import play.modules.reactivemongo.json.BSONFormats
result.map(docOpt => docOpt.map(d =>
BSONFormats.BSONDocumentFormat.writes(d).as[JsObject]))
Run Code Online (Sandbox Code Playgroud)