繁体   English   中英

Play2 Scala模型-合并对象

[英]Play2 Scala models - merge objects

我正在使用Play2 + Scala + ReactiveMongo来构建Web应用程序。 由于mongodb并不需要所有文档都具有相同的结构,因此我大量使用带有Options作为参数的案例类来实现模型。 例如:

case class PersonInfo(address: Option[String],
                      telephone: Option[String],
                      age: Option[Int],
                      job: Option[String])
case class Person(id: UUID, name: String, info: PersonInfo)

现在假设我想合并两个PersonInfo对象,例如在update函数中。 我现在做的是:

val updPInfo = old.copy(address = new.address orElse address,
                        telephone = new.telephone orElse telephone,
                        age = new.age orElse age,
                        job = new.job orElse job)

这样,我有一个对象,该对象具有新值(由new对象指定)和旧值(其余值为旧值)。

这实际上可以正常工作,但要看参数列表何时增长却很难看。

有没有更优雅的方法可以做到这一点?

如果您唯一需要的地方是在mongo,则可以这样做,如下所示:

collection.
      update(
          Json.obj("_id" -> id),
          Json.obj("$set" -> Json.toJson(new))
      )

这样,您将在DB中拥有正确的演示文稿,之后可以阅读和使用。

要么

如果在Scala中需要它,则可以合并2个Json演示文稿:

val merged = Json.toJson(old).deepMerge(new).as[PersonInfo]

那还不怎么样,那么您现在在做什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM