2013-05-10 206 views
3

我是新來的MongoDB訪問二進制數據在MongoDB中,所以這可能是一個非常愚蠢的問題...如何從斯卡拉(卡斯巴)

我試圖訪問一個軌道從蒙戈階會話存儲。

如果我打印會話,它看起來像這樣:

Some({ "data" : <Binary Data> , "_id" : "1qzyxraa27shwq2qctkon44fl" , "updated_at" : { "$date" : "2013-05-09T04:58:21.054Z"} , "created_at" : { "$date" : "2013-05-09T04:58:21.054Z"}}) 

如果我打印updated_at領域:

val updatedAt = session.get("updated_at") 
Thu May 09 00:58:21 EDT 2013 

我感興趣的領域是數據字段:

val data = session.get("data") 

問題是,我不知道該怎麼做,我不能將它轉換爲字符串或似乎將它投射到我嘗試過的任何東西。

在如果我手動找到它的分貝,現場顯示爲:

BinData(0,"BAh7BkkiEF9jc3JmX3Rva2VuB......") 

,我能夠手動處理該字符串的base64,但我怎麼得到的東西我可以卡斯巴處理?

+0

這與此有關嗎? http://stackoverflow.com/questions/13958089/get-binary-attribute-from-a-mongodb-document-in-java – 2013-05-11 01:33:11

+0

這可能也是相關的:http://stackoverflow.com/questions/8244110/get- bindata-uuid-from-mongo-as-string – 2013-05-11 01:39:40

回答

3

大量的谷歌搜索後,我發現這個跟蹤器上的這個issue。儘管它表示它在2.8版中已經修復,但它仍然只爲mongo-java-driver-2.11.1顯示「BinaryData」。

以下調用可以對數據進行,以便它返回預期的全部數據:

com.mongodb.util.JSONSerializers.getStrict().serialize(...) 

使用傑克遜的ObjectMapper,我能夠做這樣的事情得到公正的二進制數據字段:

val session = sessions.findOneByID("1qzyxraa27shwq2qctkon44fl") 
val data = com.mongodb.util.JSONSerializers.getStrict.serialize(session.get.get("data")) 
val mapper = new ObjectMapper() 
val tree = mapper.readTree(data) 
println(tree.get("$binary")) 
+1

第2行有兩個'.get.get'調用是故意的嗎? – 2013-05-11 14:54:14

+1

是的,這是必需的。先得到,得到集合,然後獲取列。 – jgrowl 2013-05-14 16:15:37