首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在mongo中创建可变地图的最佳方法是什么?

在mongo中创建可变地图的最佳方法是什么?
EN

Stack Overflow用户
提问于 2012-02-01 08:35:25
回答 1查看 331关注 0票数 0

我需要User类包含一个字符串映射,我在应用程序接口中看到了MongoMapField,所以我使用它,因为它看起来很合适。下面是我的代码:

代码语言:javascript
复制
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是不可变的(根据我的假设),并且下面的代码也不起作用:

代码语言:javascript
复制
def setToken(provider: String, token: String) { this.value = this.value + (provider -> token) }

有人知道在mongo中创建/更新字符串映射的最好方法是什么吗?

谢谢=)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 22:41:41

在处理不可变数据结构时,您需要考虑用新值替换现有值,而不是试图修改现有值。

因此,要让您的代码正常工作,您需要将其更改为:

代码语言:javascript
复制
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))
    }
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9089166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档