Мне нужен класс User, чтобы содержать карту строк, и я видел MongoMapField в api, поэтому я использовал его, потому что это казалось подходящим. Вот мой код:Каков наилучший способ создания изменчивой карты в монго?
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) }
Кто-нибудь знает, что лучший способ создать/обновить карту строк в монго, которая также прикреплена к пользователю?
Спасибо =)
Это работало просто отлично! Спасибо! Просто нужно было изменить MongoMapField [String, String] на MongoMapField [User, String]. Что делать, если я должен использовать MongoMapField [User, OauthInfo], в котором OauthInfo является классом case? Кажется, что он работает корректно, но когда я User.currentUser.open _ !. save, он не сохраняет. Вы знаете, почему это так? – user646658
MongoMapField не поддерживает классы классов. Однако вы можете заставить его работать, переопределяя функции asDBObject и fromDBObject. –