2015-09-23 44 views
0

我使用Play2 + Scala + ReactiveMongo構建Web應用程序。由於mongodb不要求所有文檔具有相同的結構,因此我使用Options作爲參數來實現模型的案例類大量使用。例如:Play2 Scala模型 - 合併對象

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對象,老值,其餘的指定新值的對象。

這實際上工作正常,但看到參數列表增長時有點難看。

有沒有更好的方法來做到這一點?

回答

0

只要你需要,這是在蒙戈的地方,你可以做到這一點,就像這樣:

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] 

這是不太好,那麼你現在正在做什麼。