2011-06-17 3 views
2

J'essaie de sauvegarder un enregistrement avec JsonObjectField (en utilisant lift-mongo- record dans Play framework) mais il est vide dans la collection de base de données. C'est mon code:Lift-mongo-record: vide JsonObjectField dans la collection mongo

Définir les classes:

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] 

J'essaie de sauver enregistrement de cette façon:

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

Et dans la collecte de MongoDB Je smth comme:

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

Qu'est-ce que je fais mal?

Répondre

1

Votre code semble correct. Peut-être essayer en utilisant MongoCaseClassField comme:


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 

Voici un exemple pour 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 


+0

merci. peut-être que le problème est dans mon environnement. Je ne savais pas qu'il y a ce champ dans le record de lift-mongo et peut-être que cela fonctionne. Puis-je sauvegarder la liste de MongoCaseClassField? parce qu'actaslly j'ai besoin d'une liste de clé, paires de valeurs. Et (la question est ancienne) j'utilise déjà BsonRecordListField. Peut-être que je devais dire cela en commentaire quand j'ai accepté cette décision – ThomasMore

+0

Salut, oui, vous pouvez utiliser MongoCaseClassListField :) Espérons que cela aide! – DaafVader

Questions connexes