2014-12-04 1 views
2

나는 내 mongo에 BinData 필드가 있으며, 부분 정보를 가지고 검색해야합니다. 나는 결과를이 쿼리를 얻을 경우mongodb의 BinData 필드에서 부분 바이너리를 찾는 방법은 무엇입니까?

{ "_id" : ObjectId("5480356518e91efd34e9b5f9"), "test" : BinData(0,"dGVzdA==") } 

이 : 내가 좋아하는 것 그러나

> db.test.find({"test" : BinData(0,"dGVzdA==")}) 
{ "_id" : ObjectId("5480356518e91efd34e9b5f9"), "test" : BinData(0,"dGVzdA==") } 

만 그것을 찾기 위해

이의 내가 가지고있는 bindata이 같다고 가정 해 봅시다 2 진 오브젝트의 일부
가능합니까?

감사합니다.

+0

어떤 개체를 BinData로 저장하고 있습니까? 파일 인 경우 GridFS를 사용하여 메타 데이터를 쿼리 할 수 ​​있습니다. – BatScream

+0

그것은 바이트 []이고, 메타 데이터뿐만 아니라 그 내용으로 질의하고 싶습니다. – Kuu

+1

2.6에서 MongoDB는 불행히도 BinData의 일부 검색을 지원하는 연산자를 가지고 있지 않습니다. 그런 일에 대한 기능 요청을 찾을 수 없습니다. 원한다면 [MongoDB JIRA] (https://jira.mongodb.org/browse/SERVER)에서 만들 수 있습니다. mnemosyn이 말했듯이, 그런 일을하는 것이 당신이 천진난히 믿는 것보다 더 복잡하다고 생각합니다. – wdberkeley

답변

1

"partial"은 막연한 용어입니다. 건초 더미의 어느 지점에서나 인접한 바이너리 데이터 (바늘) 블록을 검색하는 경우 매우 다른 해결책이 필요합니다. 이진 데이터에 대한 접미어 트리/접미사 배열

이 특정 바이트로 시작하는의 이진 데이터를 찾으려면 데이터를 16 진수 또는 64 진수로 인코딩 된 문자열로 저장하고 인덱스 용으로 루트 정규 표현식을 사용하는 것이 좋습니다. 하지만 그것은 자신의 위험 (패딩, 엔디안 등)과 엄청나게 추악한 것들로 가득차 있습니다 ...

MongoDB가 이해하는 방식으로 바이너리 데이터를 저장할 방법이 없습니까? 그게 더 쉬울 수도 ...

+0

답변 해 주셔서 감사합니다. 네, 예를 들어 텍스트로 할 수있는 것처럼 검색을 할 수 있도록 MongoDB가 바이너리를 이해할 수 있도록 찾고 있습니다. 바이너리에서 "ab cd ef"바이트가 있고 "cd"바이트를 포함하는 바이너리를 찾고 싶다고 상상해보십시오. 나는 그것을 육각형으로 표현할 수있는 확실성에 대해서도 생각했다.하지만 네가 소비하는 공간면에서보기에는 못 생기고 너무 효율적이지 않다. – Kuu