2

下面是使用 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命令返回的集合并确认它是非空的)。我错过了什么吗?

4

1 回答 1

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]))
于 2014-02-10T11:28:09.687 回答