Среда: Играйте! 2.2.3, ReactiveMongo 0.10.0-МОМЕНТНА СНИМКА
Да предположим, че имам страница със списък с документи (да кажем „проекти“) и бутон, който изскача модален диалог с полета за попълване. При натискане на бутона OK страницата изпраща заявка с JSON тяло към бекенда:
{
name: "Awesome Project",
url: "https://github.com/ab/cd",
repository: "[email protected]/ab/cd.git",
script: "empty"
}
Бекендът насочва заявката към Action
, дефиниран така:
def projectsCollection: JSONCollection = db.collection[JSONCollection]("projects")
def create = Action.async(parse.json) { request =>
projectsCollection.insert(request.body) map {
case LastError(true,_,_,_,Some(doc),_,_) => Created(JsObject(List(
"result" -> JsString("OK") ,
"doc" -> BSONFormats.toJSON(doc)
)))
case LastError(false, err, code, msg, _, _, _) => NotAcceptable(JsObject(List(
"result" -> JsString("ERROR"),
"error" -> JsString(err.getOrElse("unknown")),
"code" -> JsNumber(code.getOrElse[Int](0)),
"msg" -> JsString(msg.getOrElse("no messsage"))
)))
}
}
Класът LastError
case има параметър originalDocument: Option[BSONDocument]
, който се връща в тялото на отговора на заявката, но това не е документът, който очаквах. Искам документа с попълнено BSONObjectID
или поне самото _id
.
Опитът да извлека току-що създадения документ ме доведе до задънена улица, защото всичко е увито в Future
.
Как да напиша елегантен код, който изпълнява задачата?
_id
така или иначе не съществува, но да, наличието на_id
за неуспешна актуализация или изтриване може да бъде полезно. - person Rajish   schedule 13.11.2013