微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-如何从Scala(Casbah)访问mongoDB中的二进制数据

我是mongoDB的新手,所以这可能是一个非常愚蠢的问题…

我正在尝试从Scala访问Rails mongo会话存储.

val sessions = MongoConnection("localhost", 27017)("databaseName")("sessions")
val session = sessions.findOneById("1qzyxraa27shwq2qctkon44fl")

如果我打印会话,它看起来像这样:

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字符串,但是如何获得可使用casbah处理的内容

解决方法:

经过大量的搜寻,我在追踪器上找到了这个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"))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐