1

我試圖從reactivemongo-extensions將應用程序從Rails/Mongoid遷移到Play/Reactivemongo。我的許多文件有超過22個字段。 Play的JSON庫似乎無法處理> 22個字段。 play/scala/reactivemongo中處理超過22個字段的數據庫模式的首選模式是什麼?在Play 2.x中處理包含超過22個字段的數據庫

我覺得我必須缺少一個常見的設計模式,因爲這看起來像是一個非常常見的用例。即使是中等規模的數據庫表也無法運行的Web框架不會很有用,所以我認爲我必須忽略一個明顯的解決方案。

+0

您正在使用哪個Scala版本?我認爲這是Scala本身的限制,但它已經在Scala 2.11中得到了修復...... – Salem 2014-11-23 19:30:50

+2

規範化你的數據。一個具有超過22個字段(或接近該字段)的類並不是一個真正常見的用例。 – 2014-11-23 20:11:19

+0

在Slick中,問題由HCons列表解決,http://stackoverflow.com/questions/20555304/how-can-i-use-the-new-slick-2-0-hlist-to-overcome-22-column -limit – 2014-11-24 08:32:26

回答

0

您可以將您的平面json結構映射到分層對象結構。那麼你不需要處理巨大的對象,你可以有超過22個字段。

case class SubObject(field4: String, field5:String) 
case class MainObject(field1: String, field2: String, field3: String, 
subObject: SubObject, field6: String, field7: String) 

implicit val mainObjectFormat: Format[MainObject] = (
    (__ \ "field1").format[String] and 
    (__ \ "field2").format[String] and 
    (__ \ "field3").format[String] and 
    (
     (__ \ "field4").format[String] and 
     (__ \ "field5").format[String] 
    )(SubObject.apply, unlift(SubObject.unapply)) and 
    (__ \ "field6").format[String] and 
    (__ \ "field7").format[String]  
(MainObject.apply, unlift(MainObject.unapply)) 
相關問題