0

我有这样的模型:

@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"
  ]
 ]
}

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

4

1 回答 1

1

我认为你必须为你的 Inner 类型注册一个 BSON 钩子。请参阅文档的相关部分

于 2013-12-31T12:08:09.563 回答