我需要User类包含一个字符串映射,我在api中看到了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中创建/更新字符串映射的最佳方法是什么?它也附加到用户?
谢谢=)
答案 0 :(得分:2)
在处理不可变数据结构时,您需要考虑用新值替换现有值而不是尝试修改现有值。
因此,要使代码正常工作,您需要将其更改为:
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))
}
}
}