我是mongoDB的新手,所以这可能是一个非常愚蠢的问题…
我正在尝试从Scala访问Rails mongo会话存储.
val sessions = MongoConnection("localhost", 27017)("databaseName")("sessions")
val session = sessions.findOneById("1qzyxraa27shwq2qctkon44fl")
如果我打印会话,它看起来像这样:
Some({ "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"))
标签:casbah,scala,mongodb,java
来源: https://codeday.me/bug/20191123/2066675.html