如何在Python脚本(PyMongo)中实现mongosh的Binary.createFromBase64?
在PyMongo中实现mongosh的Binary.createFromBase64功能
问题描述
你在mongosh中使用以下语句查询:
db.my_collection.find( { my_field: Binary.createFromBase64('k4FyS0OWT6ujgLUAZKnsLw==', 3) } )
需要在Python脚本中通过PyMongo实现对应的Binary.createFromBase64功能。
解决方案
在PyMongo中,你需要结合base64模块解码字符串,再通过bson.binary.Binary类创建指定子类型的二进制对象,步骤如下:
- 导入依赖模块:需要导入PyMongo客户端、
bson.binary.Binary以及Python标准库的base64。 - 解码Base64字符串:将目标Base64字符串解码为字节对象。
- 创建指定子类型的Binary对象:用解码后的字节和子类型(对应mongosh中的第二个参数3)实例化
Binary类。 - 执行查询:用创建好的Binary对象构造查询条件,调用
find方法执行查询。
完整代码示例
from pymongo import MongoClient from bson.binary import Binary import base64 # 连接MongoDB实例 client = MongoClient('mongodb://localhost:27017/') # 指定数据库和集合 db = client['你的数据库名'] collection = db['my_collection'] # 处理Base64字符串并生成Binary对象 target_base64 = 'k4FyS0OWT6ujgLUAZKnsLw==' decoded_bytes = base64.b64decode(target_base64) # 子类型3对应mongosh中Binary.createFromBase64的第二个参数 binary_obj = Binary(decoded_bytes, subtype=3) # 执行查询并遍历结果 for document in collection.find({'my_field': binary_obj}): print(document)
说明
- mongosh中的
Binary.createFromBase64(base64Str, subtype)本质是先解码Base64为二进制数据,再标记其MongoDB二进制子类型;PyMongo中需要拆分这两步操作。 - 子类型参数必须明确指定为3,因为PyMongo的
Binary类默认子类型是0,不匹配会导致查询不到数据。
内容的提问来源于stack exchange,提问作者dada
相关产品推荐
相关产品推荐

