我需要User类包含一个字符串映射,我在应用程序接口中看到了MongoMapField,所以我使用它,因为它看起来很合适。下面是我的代码:
class User private () extends ProtoAuthUser[User] with ObjectIdPk[User] {
def meta = User
object oauth extends MongoMapField[String, String]("") {
def setToken(provider: String, token: String) {this.value += (provider -> token) }
def getToken(value: String) = {
if(!this.value.isEmpty) Full(this.value.get(value) match {
case Some(value) => value
case None => ""
})
else Empty
}
}
}本例中的setToken不起作用,因为MongoMapField是不可变的(根据我的假设),并且下面的代码也不起作用:
def setToken(provider: String, token: String) { this.value = this.value + (provider -> token) }有人知道在mongo中创建/更新字符串映射的最好方法是什么吗?
谢谢=)
发布于 2012-02-02 22:41:41
在处理不可变数据结构时,您需要考虑用新值替换现有值,而不是试图修改现有值。
因此,要让您的代码正常工作,您需要将其更改为:
class User private () extends ProtoAuthUser[User] with ObjectIdPk[User] {
def meta = User
object oauth extends MongoMapField[String, String](this) {
def setToken(provider: String, token: String) {
this.set(this.value + (provider -> token))
}
def getToken(value: String): Box[String] = {
Box(this.value.get(value))
}
}
}https://stackoverflow.com/questions/9089166
复制相似问题