最近工作中用到了mongodb,就用了pymongo来操作mongo,由于数据量过大,所以也看了下网上关于mongo数据的自动清理问题,Mongo 2.2引入了一个新特性-TTL(time to live)集合,经过指定的时间间隔或者在指定的时间点自动清除数据,pymongo对此也有实现。
from pymongo import MongoClient
import pymongo
import datetime
client = MongoClient(“mongo-ip”, 27017) # 获取mongoclient对象,参数为mongo的ip和端口(默认27017)
collection = client.test.expire # 获取collection对象,test为数据库名,expire为collection名
collection.create_index([("time", pymongo.ASCENDING)], expireAfterSeconds=66)
# 给集合添加TTL索引,expireAfterSeconds为过期时间,需要注意的是同一collection里,想要修改过期时间,索引([("time", pymongo.ASCENDING)])的值不能跟以前一样,否则会报错。
如果索引绑定的字段是数组类型,并且索引中有多个日期值,mongo会用数组中的最早日期值作为到期阀值。
data = {
"name": "dachui",
"gender": "male",
"time": datetime.datetime.utcnow(),
}
# 构造数据,需要注意,有TTL索引的集合,索引栏必须为BSON的时间格式,如果不是时间格式,或者不包含索引字段,TTL就会无效,数据也不能自动清除。
collection.insert(data) # 插入数据
操作完成后可在mongo中观察,到期之后数据将自动清除。
删除机制:
当你建立TTL索引之后,mongo会在后台启一个任务来监控,默认每六十秒运行一次,在文档到期和后台任务运行期间,文档可能保存在集合中,另外,由于删除操作的持续时间取决于mongod的工作负载,因此过期数据可能会在后台任务运行之间的60秒之后的某个时间段内存在。
官网地址:https://docs.mongodb.com/v3.2/core/index-ttl/
最后
以上就是香蕉热狗最近收集整理的关于使用pymongo给mongo中的数据添加过期时间的全部内容,更多相关使用pymongo给mongo中内容请搜索靠谱客的其他文章。
发表评论 取消回复