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に変換しようとしています...しかし、それは機能せず、結果のコレクションは常に空です(コマンドによって返されたコレクションを確認し、空でないことを確認しました) )。何か不足していますか?BSONDocumentJsValueJsValueBSONDocument

4

1 に答える 1

9

FindAndModify コマンドには返される厳密な署名があるため、BSON ハンドラーの暗黙的な (コメントで提案されている) が機能しない可能性があります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 に答える