为什么我的case类保存为$ classname到mongodb?

时间:2017-02-20 13:28:58

标签: json mongodb scala

我有一个案例类和这样的特征。

trait A {
    val _id: Option[A] = None 
    val d: Option[List[D]] = None
    val id: Option[String] = None
}

object A {
  def apply(className: String): Element = Class.forName(className: String).asInstanceOf[A]
  def unapply(element: A): Option[String] = Option(this.getClass.getName) 
}

case class B extends A (
    value1: String, value2: A, sub: Option[TypeY] = None
)

object B {

  import play.api.libs.functional.syntax._

  implicit val AFormatter: Format[A] = Json.format[A]

  implicit val BFormatter: Format[B] = Json.format[B] 

  implicit val Breads:Reads[B] = Json.reads[B]

  implicit  val BWrites = Json.writes[B]

}

在插入对应于案例类B的数据时,value2被保存为“$ A”:“abc.xyz.data”,其中“A”是特征名称,“abc.xyz.data”是包裹名字。这是因为我的申请和取消申请方法?怎么解决这个问题?

编辑:数据库保存代码

我正在使用ReactiveMongo库将数据保存到数据库。

def collB : JSONCollection = db.collection[JSONCollection]("B")

def indbNewB(b: B) = {

  collB.insert(B)

}

1 个答案:

答案 0 :(得分:0)

我认为你没有正确地序列化为JSON / string案例类A

如果你可以发布更多细节(例如实际存储数据到DB的代码),我会更新我的答案。