【问题标题】:Lift-mongo-record: Empty JsonObjectField in mongo collectionLift-mongo-record:mongo 集合中的空 JsonObjectField
【发布时间】:2011-06-17 16:06:33
【问题描述】:

我正在尝试使用 JsonObjectField 保存记录(使用 lift-mongo- 在 Play 框架中记录),但在数据库集合中为空。 这是我的代码:

定义类:

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" : { } }

我做错了什么?

【问题讨论】:

    标签: json scala mongodb playframework lift


    【解决方案1】:

    您的代码看起来不错。也许尝试使用 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
    
    
    

    【讨论】:

    • 谢谢。也许问题出在我的环境中。我不知道 lift-mongo-record 中有这个字段,可能是这样的。我可以保存 MongoCaseClassField 的列表吗?因为实际上我需要一个键值对列表。而且(问题很老)我已经使用了 BsonRecordListField。当我接受这个决定时,也许我不得不在评论中说这个
    • 嗨,是的,您可以使用 MongoCaseClassListField :) 希望对您有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2019-10-26
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多