我正在学习电梯和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是错误的方式。但我不知道如何使用它 有人可以帮忙吗?感谢答案 0 :(得分:0)
您在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中的 P.S。,get
被称为is
。