如何使用 Python 和 PyMongo 删除所有在指定日期范围内的文档?
首先,需要导入 PyMongo 库来连接 MongoDB 数据库。代码如下:
from pymongo import MongoClient client = MongoClient() db = client.test_database collection = db.test_collection
假设我们的文档保存了一个“created_at”字段表示创建时间,我们需要删除所有在“2022年1月1日”到“2022年1月31日”这个时间范围内的文档。可以使用以下代码来删除这些文档:
from datetime import datetime start_time = datetime(2022, 1, 1) end_time = datetime(2022, 1, 31) result = collection.delete_many({"created_at": {"$gte": start_time, "$lte": end_time}}) print("{} documents deleted".format(result.deleted_count))
在这里,我们使用了 MongoDB 的 $gte 和 $lte 操作符来指定日期范围。delete_many() 方法将所有符合条件的文档删除,并返回一个包含删除数量的对象,我们利用 deleted_count 属性打印出已删除的文档数量。
完整代码示例:
from pymongo import MongoClient from datetime import datetime client = MongoClient() db = client.test_database collection = db.test_collection start_time = datetime(2022, 1, 1) end_time = datetime(2022, 1, 31) result = collection.delete_many({"created_at": {"$gte": start_time, "$lte": end_time}}) print("{} documents deleted".format(result.deleted_count))
注意:这里的日期格式必须是 datetime 类型,如果我们要使用字符串作为日期范例,需要先将字符串转换为 datetime 类型。
代码示例:
from pymongo import MongoClient from datetime import datetime client = MongoClient() db = client.test_database collection = db.test_collection start_time_str = "2022-01-01" end_time_str = "2022-01-31" start_time = datetime.strptime(start_time_str, "%Y-%m-%d") end_time = datetime.strptime(end_time_str, "%Y-%m-%d") result = collection.delete_many({"created_at": {"$gte": start_time, "$lte": end_time}}) print("{} documents deleted".format(result.deleted_count))
相关文章