Lift-mongo-record: пустое поле JsonObjectField в коллекции монго - PullRequest
2 голосов
/ 17 июня 2011

Я пытаюсь сохранить запись с помощью JsonObjectField (используя lift-mongo- запись в Play Framework), но она пуста в базе данных. Это мой код:

Определение классов:

class Wish extends MongoRecord[Wish] with MongoId[Wish] {
  def meta = Wish
  object body extends StringField(this, 1024)
  object tags extends MongoListField[Wish, String](this)
  object form extends JsonObjectField[Wish, Criterion](this, Criterion) {
    def defaultValue = null.asInstanceOf[Criterion]
  }
}
object Wish extends Wish with MongoMetaRecord[Wish] {
  override def collectionName = "wishes"
}

case class Criterion (key: String, value: String) extends JsonObject[Criterion] {
  def meta = Criterion
}
object Criterion extends JsonObjectMeta[Criterion]

Я пытаюсь сохранить запись следующим образом:

Wish.createRecord.body("body").tags(List("tags", "test")).form(new Criterion("From", "Arbat")).save

А в коллекции mongodb у меня что-то вроде:

{ "_id" : ObjectId("4dfb6f45e4b0ad4484d3e8c6"), "body" : "body", "tags" : [ "tags", "test" ], "form" : { } }

Что я делаю не так?

1 Ответ

1 голос
/ 27 июня 2011

Ваш код выглядит нормально. Может быть, попробуйте использовать MongoCaseClassField, например:


object form extends MongoCaseClassField[Wish, Criterion](this)

case class Criterion (key: String, value: String){}

//btw you can leave out the "new" for case classes - it calls 
//the automatically generated apply method
Wish.createRecord.body("body").tags(List("tags", "test"))
            .form(Criterion("From","Arbat")).save

Вот пример для MongoCaseClassListField:


object form extends MongoCaseClassListField[Wish, Criterion](this)

Wish.createRecord.body("body").tags(List("tags","test"))
       .form(List(Criterion("key1","val1"), Criterion("key2", "val2"))
       .save


...