我有一个二进制字段,我存储在mongo中。该值目前是MD5哈希值,但未来可能会发生变化。我试图决定使用什么bson二进制子类型。具体来说,我不确定是否应该使用BSON.BSON_BINARY_SUBTYPE_DEFAULT或BSON.BSON_BINARY_SUBTYPE_MD5。 mongo是否能够使用此子类型来执行任何类型的优化?例如,如果它知道值是MD5,它可以构建更智能的索引吗?
答案 0 :(得分:0)
MongoDB可以使用“隐藏”的bindata密钥存储散列索引。
https://docs.mongodb.com/manual/core/index-hashed/
如果您不希望执行此特定索引所使用的通配符查询,则哈希索引可以将可索引字段“缩小”或“展开”向下/向上扩展到已知大小。这意味着您可以使用散列函数指定的长度索引键(可能长度为32个字节)来索引一个非常长的字符串(长4MB)
应用程序不需要了解有关散列函数或内部的任何信息,您只能看到更快的查询结果,但代价是潜在但非常不可能的散列冲突。
然后还有应用程序可用的按位bindata运算符,包括要存储的bindata类型。最明显的用例是存储日志的Web应用程序,包括用户IP地址作为二进制数据和用户定义的子类型。
您的查询可以使用$ bitsAllSet来使用标准网络掩码来查询从特定网络范围建立的连接。 MongoDB完全有能力检查
https://docs.mongodb.com/v3.2/reference/operator/query-bitwise/