如何更新JsValue?

时间:2018-03-30 18:42:25

标签: scala playframework-2.0

JsValuetrait。它可能是任何事前的对象。 JsArrayJsObject等。给出功能Ex。

override def update(Id: String, jsValue: JsValue): Future[Option[Person]] = {
import utils.MongoFormats.dateTimeWriteFormat
execFindAndUpdate(
  _.findAndUpdate(
    Json.obj("xyz_ID" -> id),
    Json.obj("$set" -> jsValue),
    fetchNewObject = true
  )
) map { response =>
  logger.info(s"MongoDB response: $response")
  response.result[Person]
}
}

我想在写入updatedAt时添加mongoDB。 Inshort我想更新jsValue。 我试着做了

  

Json.obj(“$ set” - > jsValue,“$ set” - > Json.obj(“updatedAt” - > Json.toJson(new DateTime())))

但失败了。

仅供参考我使用scala 2.6.xreactiveMongo版本0.12.7-play26 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:-1)

但是你知道只有拥有JsObject才能更新。对于其他情况,这将毫无意义,对吧?所以解决方案是仅在这种情况下检查和更新:

override def update(Id: String, jsValue: JsValue): Future[Option[Person]] = {
  import utils.MongoFormats.dateTimeWriteFormat
  execFindAndUpdate(
    _.findAndUpdate(
      Json.obj("xyz_ID" -> id),
      Json.obj("$set" -> (jsValue match {
        case o: JsObject => o + ("updatedAt" -> Json.toJson(new DateTime()))
        case o => o
      })),
      fetchNewObject = true
    )
  ) map { response =>
    logger.info(s"MongoDB response: $response")
    response.result[Person]
  }
}