使用pymongo给mongo中的数据添加过期时间

     最近工作中用到了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/

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值