簡體   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