salat - 在没有反序列化外部对象的情况下附加到内部案例类列表的正确方法?

时间:2013-12-31 05:09:52

标签: mongodb scala salat

我有这样的模特:

@Salat
class Base
case class Outer(@Key("_id") id:String = "outer", inners:List[Inner] = Nil) extends Base
case class Inner(id:String = "inner") extends Base


object Outer extends SalatDAO[Outer, ObjectId](DBConnections.local("outers"))

如果我插入一个具有内部的外部,如下所示:

Outer.insert(new Outer("outer-b", List(new Inner("inner-b"))))

我在数据库中最终得到了这个:

{
 "_id":"outer-b",
 "_typeHint":"com.github.grinchy.farkle.models.Outer",
 "inners":[
  {
   "_typeHint":"com.github.grinchy.farkle.models.Inner",
   "id":"inner-b"
  }
 ]
}

但是,如果我只是尝试使用$ push:

将内部附加到外部列表中
Outer.insert(new Outer("outer-a"))

val query = MongoDBObject("_id" -> "outer-a")
val stmt = MongoDBObject("$push" -> MongoDBObject("inners" -> new Inner("inner-a")))

Outer.update(query, stmt)

然后将内部插入为数组:

{
 "_id":"outer-a",
 "_typeHint":"com.github.grinchy.farkle.models.Outer",
 "inners":[
  [
   "inner-a"
  ]
 ]
}

在不反序列化外部对象的情况下追加内部案例类列表的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你必须为你的内部类型注册一个BSON钩子。请参阅documentation

的相关部分