JsValue
是trait。它可能是任何事前的对象。 JsArray
,JsObject
等。给出功能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.x
和reactiveMongo
版本0.12.7-play26
有人可以帮帮我吗?
答案 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]
}
}