我需要使用 pymongo 通过 python 搜索 ObjectId,但总是收到错误。
import pymongo
from pymongo import MongoClient
from pymongo import ObjectId
gate = collection.find({'_id': ObjectId(modem["dis_imei"])})
有什么想法如何搜索吗?
在提供的代码片段中,似乎在尝试使用存储在变量
modem["dis_imei"]
中的值来查询与
_id
字段匹配的文档。如果此值表示 MongoDB ObjectId 的字符串表示形式,则需要将其转换为
ObjectId
对象。
以下是使用
pymongo
按 ObjectId 在 MongoDB 中搜索文档的方法:
import pymongo
from bson.objectid import ObjectId
# 建立与 MongoDB 数据库的连接
client = pymongo.MongoClient("mongodb://localhost:27017/")
# 选择数据库和集合
db = client["your_database_name"]
collection = db["your_collection_name"]
# 从 modem["dis_imei"] 获取 ObjectId 字符串
object_id_str = modem["dis_imei"]
# 将 ObjectId 字符串转换为 ObjectId 对象
object_id = ObjectId(object_id_str)
# 使用 find_one() 方法按 _id 搜索文档
document = collection.find_one({"_id": object_id})
# 检查文档是否存在
if document:
print(f"找到的文档:{document}")
else:
print("未找到文档。")
说明:
-
导入
bson.objectid.ObjectId
: 确保从bson.objectid
模块导入ObjectId
类,以便处理 ObjectId。 -
将 ObjectId 字符串转换为 ObjectId 对象:
使用
ObjectId(object_id_str)
将存储在modem["dis_imei"]
中的 ObjectId 字符串转换为ObjectId
对象。 -
使用
find_one()
方法: 由于_id
是唯一的,因此我们使用find_one()
方法来检索与给定_id
匹配的单个文档。 -
错误处理:
如果未找到文档,
find_one()
方法将返回None
。因此,检查返回的值是否为None
以防止错误至关重要。
通过对代码进行这些调整,应该能够使用
pymongo
按 ObjectId 成功搜索文档。请记住,将占位符值替换为的实际数据库、集合名称和 ObjectId 字符串。