2015-09-23 97 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] 

这是不太好,那么你现在正在做什么。