Выполните 2 операции для обновления на ReactiveMongo
Я тестирую следующие 2 запроса на оболочке Монго, и это работает,
Но теперь мне нужно выполнить тот же запрос в реактивноммонго
Кто-то может дать мне предложение о том, как сделать запрос в реактивной монго
doc = db.offer.find({"_id": "5704441ea356f55ab590e8f4"})
db.student.update(
{ "_id" : "570681b30fc032dea831c132"},
{ $push: {
"presell": [
{ "_id" : doc }
]
}
}
)
Есть ли лучший способ выполнить этот запрос?
1 ответ
Использование flatMap было решением, которое я искал
def preSell( user_id: String, offer_id: String ) = Action.async {
val futureResults = collection_offer.find( Json.obj("_id" -> offer_id ) ).one[JsValue]
futureResults.flatMap {
case Some(document) =>
val futureUpdate = collection.update( Json.obj( "_id" -> user_id ), Json.obj( "$addToSet" -> Json.obj( "presell" -> Json.toJson(document) ) ) )
futureUpdate.map { result =>
Logger.debug("Successfully update")
Ok( Json.obj( data -> Json.obj( "_id" -> user_id ) ) )
}.recover {
case t: TimeoutException =>
Logger.error("Problem found in student update process")
InternalServerError(t.getMessage)
}
case None =>
Future.successful( Ok( Json.obj( data -> "Document NotFound" ) ) )
}.recover {
case t: TimeoutException =>
Logger.error("Problem obtaining teacher")
InternalServerError(t.getMessage)
}
}
Scala Play Action.async не может быть разрешен Ok as mvc.AnyContent