我的数据库看起来像
[
{
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]
,然后获取其属性。这真的有必要吗?
答案 0 :(得分:0)
grater
不会将集合作为类型参数,只是一个案例类或特征/抽象类,其具体表示是案例类。由于您只是在查询地图,因此只需使用DBObject
从getAs[T]
中提取所需的值。
Number
可能不是萨拉特支持的类型 - 我当然从未尝试过。如果您需要Number
,您可以编写自定义转换器或发送拉取请求以向Salat添加真正的支持。