scala - 如何使用 MongoListField 返回列表

标签 scala mongodb lift

我正在学习 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/

相关文章:

scala - 如何使用 ToFunctorOps 的提升

scala - 将参数列表应用于函数列表

Scala map 方法语法

node.js - MongooseError - 操作 `users.findOne()` 缓冲在 10000 毫秒后超时

scala - 在 Mac OS X 10.6 上安装 SBT

java - Play Framework 2 : Create images in public/images

python - 返回字段值为 1 或 3 的文档

mongodb - Meteor 在没有安装 MongoDB 的情况下如何工作?

scala - 提升 RewriteResponse 未找到有效的 url

grails - 提升与 Grails 的比较