如何使用MongoListField返回列表

时间:2011-07-23 10:37:27

标签: scala mongodb lift

我正在学习电梯和mongodb。我遇到了如下问题。为简单起见,我将绕过一些代码。这是代码:

object User extends User with MetaMegaProtoUser[User] {

}

class User extends MegaProtoUser[User] {
  def meta = User

  //record the post list that user like
  object likePostList extends MongoListField[User, ObjectId](this)

  def test()
  {
    val list:  = this.likePostList
    println(list.length)
  }
}

error: value length is not a member of object User.this.likePostList
this.likePostList.length

我可以将ObjectId数据存储在MongoDB中。但MongoListField不返回列表。为什么?如何将其用作列表。

我尝试将类型案例添加到List [OjbectId]或List [String]但没有运气。

val list: List[ObjectId] = this.likePostList.asInstanceOf[List[Object]]

收到错误:     java.lang.ClassCastException:com.cosiin.model.User $ likePostList $无法强制转换为scala.collection.immutable.List

我认为我使用MongoListField是错误的方式。但我不知道如何使用它 有人可以帮忙吗?感谢

1 个答案:

答案 0 :(得分:0)

您在Lift Records中声明的字段是字段对象,而不是字段中包含的实际值。要访问您需要调用的实际值:

this.likePostList.get

或如果该字段是可选的

this.likePostList.valueBox

返回一个scala.Option之类的对象。

如果您这么想,这非常有意义,因为当您输入时,您实际上声明likePostListMongoListField的实例:

object likePostList extends MongoListField[User, ObjectId](this)

而不是

val likePostList: List[ObjectId] = ...

Scala无法自动将其转换为List[ObjectId]。它与:

相同
class Foo {
  val bar = 3
  object baz { val greeting = "hello" }
}

val foo = new Foo
println(foo.bar) // prints 3
println(foo.baz) // prints something like Foo$baz$@1d981b6a
println(foo.baz.greeting) // prints "hello"
旧版Lift中的

P.S。get被称为is