过期时间设置需要连索引一起设置
而该索引成为TTL索引,需要用到UTC时间设置,否则不会过期
然而这里最少的过期时间为5秒,少于5秒会报错。
这里需要注意,过期时间一到,数据可能还不会立刻删除。这是因为mangodb有一个轮询操作,过期时间的记录会记录在后台任务中,等数据库的删档时间即60一到就会执行后台任务的过期时间记录。没到或者过了删档时间,则会等待下一个删档时间的来临。
这也导致了,该过期时间功能,不能执行一些需要精确的验证操作,如用户验证等。
以下是官方文档原话:
Mongodb官方文档TTL索引说明
https://docs.mongodb.com/v4.4/core/index-ttl/
pymongo官方文档:
https://pymongo.readthedocs.io/en/latest/
最后附上源代码:
# -*- coding: utf-8 -*-
"""
@Time : 2021/9/27 10:17
@Author : Pierce
@Email : 1042161713@qq.com
@File : 过期时间.py
"""
import pymongo
import datetime
import time
# 连接数据库
client = pymongo.MongoClient("localhost", 27017)
db = client.view_book
# 获取表
table = db.book1
# 创建索引并设置过期时间
table.create_index([("timer", 1)], expireAfterSeconds=5)
data = {"name": "PHP从入门到入土",
"subject": 'PHP',
"price": 12,
"page": 200,
"author": "Pierce",
"press": "帅哥出版社",
"timer": datetime.datetime.utcnow()} # 需要用UTC时间
# table.insert_one(data)
# d1 = table.find_one()
# print(d1)
client.close()