我可以在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字段中存储二进制数据并使用正则表达式吗?
答案 0 :(得分:0)
MongoDB Regex仅支持字符串值
https://docs.mongodb.com/manual/reference/operator/query/regex/
由mongod服务器中的正则表达式匹配代码确认。请注意,在下面的链接中,正则表达式仅尝试匹配字符串和符号。任何其他类型的响应都在第274行上硬编码为false
此外
对于二进制类型的查询,您只能执行4种查询操作
https://docs.mongodb.com/manual/reference/operator/query-bitwise/
作为替代:
您可以(可能是一个很糟糕的主意) ascii装甲(在python中,<bytes>.decode("hex")
会给您提供UTF-8字符串)。将UTF-8字符串放入数据库中。您需要巧妙地制作新的正则表达式,使其与ASCII修饰的字符串而不是二进制数据本身匹配。
再次,将任意正则表达式与应放在GridFS中的二进制数据匹配,这正以不适合使用的方式滥用MongoDB。