如何更新 JsValue?
How to update JsValue?
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]
}
}
我想在写入 mongoDB
时添加 updatedAt
。简而言之,我想更新 jsValue
。
我试过
Json.obj("$set" -> jsValue, "$set" -> Json.obj("updatedAt" -> Json.toJson(new DateTime())))
但是失败了。
仅供参考,我正在使用 scala
2.6.x
和 reactiveMongo
版本 0.12.7-play26
有人可以帮我解决这个问题吗?
但是你知道只有拥有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]
}
}
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]
}
}
我想在写入 mongoDB
时添加 updatedAt
。简而言之,我想更新 jsValue
。
我试过
Json.obj("$set" -> jsValue, "$set" -> Json.obj("updatedAt" -> Json.toJson(new DateTime())))
但是失败了。
仅供参考,我正在使用 scala
2.6.x
和 reactiveMongo
版本 0.12.7-play26
有人可以帮我解决这个问题吗?
但是你知道只有拥有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]
}
}