mongodb二进制正则表达式pymongo

时间:2018-06-14 16:41:44

标签: python mongodb binary pymongo bson

我可以在pymongo中使用正则表达式查找使用bson.binary.Binary创建的字段吗?

我使用collection.insert_one({"data": bson.binary.Binary(some_bin_data)})创建了一些对象。

我正在尝试collection.find({"data": {"$regex": str(rg)}})collection.find({"data": {"$regex": bson.regex.Regex(rg)}})collection.find({"data": {"$regex": re.compile(rg)}})使用正则表达式过滤对象,但它们不起作用。

我在pymongo docs中找不到任何关于它的内容。

或者,还有另一种方法可以在mongodb字段中存储二进制数据并使用正则表达式吗?

1 个答案:

答案 0 :(得分:0)

MongoDB Regex仅支持字符串值

https://docs.mongodb.com/manual/reference/operator/query/regex/

由mongod服务器中的正则表达式匹配代码确认。请注意,在下面的链接中,正则表达式仅尝试匹配字符串和符号。任何其他类型的响应都在第274行上硬编码为false

https://github.com/mongodb/mongo/blob/b5291b87ab3350bff9bd9ef4464a63dcda81ac21/src/mongo/db/matcher/expression_leaf.cpp#L262-L274

此外

对于二进制类型的查询,您只能执行4种查询操作

https://docs.mongodb.com/manual/reference/operator/query-bitwise/

作为替代:

您可以(可能是一个很糟糕的主意) ascii装甲(在python中,<bytes>.decode("hex")会给您提供UTF-8字符串)。将UTF-8字符串放入数据库中。您需要巧妙地制作新的正则表达式,使其与ASCII修饰的字符串而不是二进制数据本身匹配。

再次,将任意正则表达式与应放在GridFS中的二进制数据匹配,这正以不适合使用的方式滥用MongoDB。