我的数据库看起来像
[
{
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'
我想我可以通过创建一个 case 类来做到这一点,该类的唯一字段是Map[String, Number]
,然后获取其属性。这真的有必要吗?
grater
不将集合作为类型参数,只接受案例类或特征/抽象类,其具体表示形式是案例类。 由于您只是在查询地图,因此只需使用getAs[T]
从DBObject
中提取所需的值即可。
Number
可能不是 Salat 中受支持的类型 - 我当然从未尝试过。 如果需要Number
可以编写自定义转换器或发送拉取请求以添加对 Salat 的真正支持。