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

标签 java mongodb scala casbah

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

我正在尝试从 Scala 访问 Rails Mongo session 存储。

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

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

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(...)

使用 jackson 的 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"))

关于java - 如何从 scala (casbah) 访问 mongoDB 中的二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492372/

相关文章:

java - JEP 145 发生了什么(由于编译代码重用,jvm 启动更快)?

java - MOOC 练习 36 帮助 : Loops, 内存和结束

java - 从 Java 中的字符串文字中提取重复模式集

scala - 如何使用 Play with Scala 和 Slick 从数据库中获取记录

Scala:扩展特征的类是否总是采用特征属性?

java - 天文计算 : J2SE code woking, 但不在 android 中

mongodb - 如何仅对单个字段进行 MongoDB 不区分大小写的搜索?

javascript - × React - fetch ('/' ) 不会命中 Express.router 中的索引路由

javascript - 使用集合过滤事件

java - 如何更改 Akka 应用程序的默认序列化程序?