Python中如何使用MongoDB TTL索引进行数据过期管理?

2023-04-15 00:00:00 索引 过期 如何使用

MongoDB的TTL(Time To Live)索引可以帮助我们自动删除过期数据,非常适用于日志、缓存等场景。假设我们有一个collection叫做logs,我们需要记录每个用户的登录时间,而这些登录时间的有效期为30天,过期的数据需要自动删除。下面是使用Python创建TTL索引的示例:
1. 安装pymongo模块
在终端中输入以下命令:

pip install pymongo
  1. 连接MongoDB
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['logs']
  1. 创建TTL索引
    我们可以在MongoDB中使用db.collection.createIndex()方法来创建TTL索引。该方法的第一个参数是索引字段(需要是日期类型),第二个参数是过期时间(以秒为单位)。
from datetime import datetime, timedelta
collection.create_index('login_time', expireAfterSeconds=30*24*60*60)

这里我们创建了一个名为login_time的TTL索引,过期时间为30天。
4. 插入数据

doc = {'user_id': 'user1', 'login_time': datetime.utcnow()}
collection.insert_one(doc)
  1. 查询数据
for doc in collection.find():
    print(doc)

此时我们可以看到插入的文档,但在30天后,该文档会被自动删除(因为它的login_time字段已过期)。
完整代码:

from pymongo import MongoClient
from datetime import datetime, timedelta
client = MongoClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['logs']
# 创建TTL索引
collection.create_index('login_time', expireAfterSeconds=30*24*60*60)
# 插入数据
doc = {'user_id': 'user1', 'login_time': datetime.utcnow()}
collection.insert_one(doc)
# 查询数据
for doc in collection.find():
    print(doc)

如果您需要使用字符串作为范例,请使用下面的代码:

from pymongo import MongoClient
from datetime import datetime, timedelta
client = MongoClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['logs']
# 创建TTL索引
collection.create_index('content', expireAfterSeconds=10)
# 插入数据
doc = {'message_id': '1', 'content': 'pidancode.com', 'timestamp': datetime.utcnow()}
collection.insert_one(doc)
# 查询数据
for doc in collection.find():
    print(doc)

这里我们创建一个名为content的TTL索引,过期时间为10秒。插入了一个文档,该文档的content字段为“pidancode.com”,10秒后该文档会被自动删除。

相关文章