如何从斯卡拉(卡斯巴)
我是新来的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,但我怎么得到的东西我可以卡斯巴处理?
大量的谷歌搜索后,我发现这个跟踪器上的这个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"))
第2行有两个'.get.get'调用是故意的吗? – 2013-05-11 14:54:14
是的,这是必需的。先得到,得到集合,然后获取列。 – jgrowl 2013-05-14 16:15:37
这与此有关吗? http://*.com/questions/13958089/get-binary-attribute-from-a-mongodb-document-in-java – 2013-05-11 01:33:11
这可能也是相关的:http://*.com/questions/8244110/get- bindata-uuid-from-mongo-as-string – 2013-05-11 01:39:40