【发布时间】:2013-11-08 13:01:34
【问题描述】:
环境:玩! 2.2.3、ReactiveMongo 0.10.0-SNAPSHOT
假设我有一个包含文档列表的页面(比如说“项目”)和一个按钮,该按钮会弹出一个模式对话框,其中包含要填写的字段。按下 OK 按钮后,页面会发送一个带有 JSON 正文的请求到后端:
{
name: "Awesome Project",
url: "https://github.com/ab/cd",
repository: "git@github.com/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 案例类有一个参数originalDocument: Option[BSONDocument],它在请求响应正文中返回,但它不是我期望的文档。我想要填充了BSONObjectID 或至少_id 本身的文档。
试图检索新创建的文档导致我走入了死胡同,因为所有内容都包含在 Future 中。
如何编写完成任务的优雅代码?
【问题讨论】:
-
出现错误需要访问_id吗?
-
@sh1ng 我没有考虑过,因为这种情况是为了创建一个新条目,所以如果出现错误,
_id无论如何都不存在,但是是的,拥有_id失败的更新或删除可能很有用。
标签: mongodb scala playframework future reactivemongo