2013-05-10 4 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") 

문제는, 나는 이걸로 무엇을 해야할지 모르겠다. 나는 그것을 문자열로 변환 할 수 없거나, 내가 시도한 것에 그것을 던져 넣을 수 없다. 내가 수동으로 찾을 경우 DB에

이 필드는 다음과 같이 나타납니다 :

BinData(0,"BAh7BkkiEF9jc3JmX3Rva2VuB......") 

그리고 수동으로 base64로 문자열을 처리 할 수 ​​있어요하지만 방법은 내가 카스바으로 처리 할 수있는 뭔가를받을 수 있나요?

+0

관련이 있습니까? http://stackoverflow.com/questions/13958089/get-binary-attribute-from-a-mongodb-document-in-java –

+0

이것은 관련이있을 수도 있습니다 : http://stackoverflow.com/questions/8244110/get- bindata-uuid-from-mongo-as-string –

답변

3

많은 검색 결과를 얻은 후, 나는이 추적자에서 issue을 발견했습니다. 2.8로 고정되었지만 mongo-java-driver-2.11.1에 대해서만 여전히 "BinaryData"가 표시됩니다. 난 그냥 바이너리 데이터 필드를 얻기 위해 같은 것을 할 수 있었다 잭슨의 ObjectMapper를 사용

com.mongodb.util.JSONSerializers.getStrict().serialize(...) 

: 그것은 전체 예상대로 데이터를 반환하도록

다음 호출

은 데이터를 만들 수 있습니다 :

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

두 번째'.get.get' 호출은 의도적으로 2 행에 있습니까? –

+1

예, 필수 항목입니다. 먼저 가져오고 컬렉션을 가져오고 두 번째로 열을 가져옵니다. – jgrowl