Scala Salat反序列化:如何获取Map [String,Number]?

时间:2014-02-08 00:36:49

标签: mongodb scala casbah salat

我的数据库看起来像

[
  {
    name: "domenic",
    records: {
      today: 5,
      yesterday: 1.5
    }
  },
  {
    name: "bob",
    records: { ... }
  }
]

当我尝试像

这样的查询时
val result: Option[DBObject] = myCollection.findOne(
  MongoDBObject("name" -> "domenic")
  MongoDBObject("records" -> 1),
)

val records = result.get.getAs[BasicDBObject]("records").get
grater[Map[String, Number]].asObject(records)

它失败了(在运行时!)

GRATER GLITCH - unable to find or instantiate a grater using supplied path name

REASON: Class scala.collection.immutable.Map is an interface

Context: 'global'
Path from pickled Scala sig: 'scala.collection.immutable.Map'

我想我可以通过创建一个案例类来完成这项工作,该案例类的唯一字段是Map[String, Number],然后获取其属性。这真的有必要吗?

1 个答案:

答案 0 :(得分:0)

grater不会将集合作为类型参数,只是一个案例类或特征/抽象类,其具体表示是案例类。由于您只是在查询地图,因此只需使用DBObjectgetAs[T]中提取所需的值。

Number可能不是萨拉特支持的类型 - 我当然从未尝试过。如果您需要Number,您可以编写自定义转换器或发送拉取请求以向Salat添加真正的支持。