【问题标题】:Play2 Scala models - merge objectsPlay2 Scala 模型 - 合并对象
【发布时间】:2015-12-20 11:05:57
【问题描述】:

我正在使用 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 对象,例如在更新函数中。我现在做的是:

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 对象指定的新值和其余值的旧值。

这实际上工作得很好,但是看到参数列表何时增长有点难看。

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

【问题讨论】:

    标签: scala playframework-2.0 reactivemongo


    【解决方案1】:

    如果你唯一需要这个的地方是在 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]
    

    这还不是很好,那么你现在在做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2015-07-03
      • 2017-02-22
      • 2018-07-23
      相关资源
      最近更新 更多