2014-02-08 96 views
1

我的數據庫看起來像斯卡拉薩拉特反序列化:如何獲得一個地圖[字符串,數字]?

[ 
    { 
    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

grater不將集合作爲類型參數,只有case類或trait/abstract類,其具體表示是case類。由於您只是查詢地圖,只需使用getAs[T]DBObject中提取所需的值。

Number可能不是Salat支持的類型 - 我從來沒有嘗試過。如果您需要Number,您可以編寫自定義轉換器或發送拉取請求以向Salat添加實際支持。

+0

'Number'是我短時間內使用JSON的唯一方式,否則只要有非小數(例如'[45.4,45.6,45.8,46,46.2]'),它就會拋出異常。 – Domenic

+0

你可以顯示'getAs'代碼的樣子嗎? – Domenic