我正在学习 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 的方式不对。但是我不知道怎么用。
谁能帮忙?谢谢
最佳答案
您在 Lift Records 中声明的字段是字段对象,而不是字段中包含的实际值。为了访问您需要调用的实际值:
this.likePostList.get
或者如果该字段是可选的
this.likePostList.valueBox
它返回一个类似 scala.Option
的对象。
如果您仔细想想,这非常有意义,因为您实际上是在将 likePostList
声明为 MongoListField
的一个实例,当您键入:
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 中,get
被称为 is
。
关于scala - 如何使用 MongoListField 返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799828/