2014-12-04 99 views
2

我在我的mongo中有一个BinData字段,我需要通过部分信息对它进行查找。如何通过mongodb中BinData字段的部分二进制文件查找?

比方说,我有bindata看起来是这样的:

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

如果我这样做查询我得到的结果是:

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

不过,我想,只有一个发现它二进制对象的一部分。
可能吗?

谢谢!

+0

你存储为BinData的对象是什么?如果它们是文件,则可以使用GridFS并查询其元数据。 – BatScream 2014-12-04 18:54:32

+0

这是一个字节[],我想查询它的内容,不仅是元数据 – Kuu 2014-12-05 06:51:52

+1

从2.6开始,不幸的是,MongoDB没有运营商支持搜索BinData的一部分。我找不到这样的功能请求 - 如果您愿意,可以在[MongoDB JIRA](https://jira.mongodb.org/browse/SERVER)中创建一个功能请求。正如mnemosyn所说,我认为做这样的事比你天真地相信要复杂得多。 – wdberkeley 2014-12-05 16:44:49

回答

1

“部分”是一个模糊的术语 - 如果你正在寻找在草堆里任何一点的二进制数据(针)的连续块,你将需要一个非常不同的解决方案,我想,也许基于东西在二进制数据的后缀树/后缀数组上。

如果你想找到特定字节开始二进制数据,你可能要考虑数据存储为十六进制或base64编码字符串和使用正则表达式扎根索引使用。但是,这充满了自身的风险(填充,字节顺序等),令人难以置信的丑陋...

是不是有一种方式来存储二进制数据的方式,MongoDB了解它?这可能会更容易...

+0

感谢您的回答。是的,我正在寻找使MongoDB能够理解二进制文件,所以我可以像搜索文本一样进行搜索。想象一下,我有一个二进制的“AB CD EF”字节,我想找到那些含有“CD”字节的二进制文件。我还想过把它表示为十六进制的可能性,但是,它是丑陋的,并且在空间消耗方面效率不高。 – Kuu 2014-12-04 14:14:57

相关问题