2013-05-10 132 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