关键词: expireAfterSeconds、TTL

TTL Time to Live

类似Redis中的expire机制,MongoDB也可以设置过期自动删除的表。

MongoDB的过期设置依赖索引(TTL-index),设置过期字段使用的索引后,插入数据时在该字段指定日期时间,

经过在创建索引时指定的秒数后,该记录会被MongoDB认为已经过期,然后删除。

JS版

db.test_timer.createIndex({"timer":1}, {expireAfterSeconds: 10})
db.test_timer.insert({"timer":new Date(), "a":'abc'}) // 指定当前时间
db.test_timer.insert({"timer": new Date("2017/3/25 13:11:00"), "c": "CC"}) // 指定任意时间

Python版

创建索引和指定过期时间的方式类似,要注意的是过期时间的字段必须使用UTC时间,否则无法正常删除记录
因此指定过期时间删除虽然也可以起作用,但是不能确定删除时间非常精确。

from pymongo import MongoClient
cli = MongoClient()
db = cli['test']
tbl = db['test_timer2']
tbl.create_index([("timer2", 1)], expireAfterSeconds=10)
from datetime import datetime
tbl.insert({"timer2": datetime.utcnow(), "user": "Hehehehe!"}) from time import strptime, time, mktime
t1 = strptime("2017/3/25 13:36:02", "%Y/%m/%d %H:%M:%S")
t2 = datetime.utcfromtimestamp(mktime(t1))
tbl.insert({"timer2": t2, "CC": 12345})
tbl.insert({"timer2": 123, "TT": 1}) # TTL-index字段也可以是其他值,这是就不能被自动删除
cli.close()

经过测试,实际删除数据的时间与索引加上数据指定的时间点之间存在偏移,可能是MongoDB删除数据机制的问题。

MongoDB中设置expire过期自动删除的更多相关文章

  1. 如何在Mongodb中实现数据超时自动删除功能?

    在工作过程中,我们难免会遇到这样的问题,我们想保存一些数据,但是我们对这些数据的要求并不高,有时候往往只是想要某个时间范围内的数据,比如我们如果永远只关心从当前时间往前推半年内的数据特性,那么我们就不 ...

  2. asp中设置session过期时间方法总结

    http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载   asp中默认session过期时间 ...

  3. C# asp.net IIS 在web.config和IIS中设置Session过期时间

    有时候在web.config设置sessionState 或者类文件里设置Session.Timeout,在IIS里访问时每次都是达不到时间就超时,原因是因为在IIS中设置了Session的超时时间, ...

  4. logging日志的使用和设置过期自动删除

    一.logging的基础使用 1.logging的级别 import logging logging.debug('debug message') # 计算或者工作的细节 logging.info(' ...

  5. redis中key的过期键删除策略

    Redis过期键删除策略 Redis key过期的方式有三种: 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删 ...

  6. PHP中设置session过期的时间

    如何严格限制session在30分钟后过期!1.设置客户端cookie的lifetime为30分钟:2.设置session的最大存活周期也为30分钟:3.为每个session值加入时间戳,然后在程序调 ...

  7. 在Redis中设置了过期时间的Key,需要注意哪些问题?

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等 ...

  8. 对mysqlbinlog日志进行操作的总结包括 启用,过期自动删除

    操作命令: show binlog events in 'binlog.000016' limit 10; reset master 删除所有的二进制日志 flush logs  产生一个新的binl ...

  9. [转]在MyEclipse中设置struts.xml自动提示功能

    导入标签:<%@ taglib uri="/struts-tags" prefix="s" %> 要想在MyEclipse中实现struts.xml ...

随机推荐

  1. 铁乐学python_Day42_线程池

    铁乐学python_Day42_线程池 concurrent.futures 异步调用模块 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor: ...

  2. spring4声明式事务—02 xml配置方式

    1.配置普通的 controller,service ,dao 的bean. <!-- 配置 dao ,service --> <bean id="bookShopDao& ...

  3. 【转载】MySQl 数据库插入加锁分析

    http://yeshaoting.cn/article/database/mysql%20insert%E9%94%81%E6%9C%BA%E5%88%B6/

  4. 线性dp

    线性dp应该是dp中比较简单的一类,不过也有难的.(矩乘优化递推请出门右转) 线性dp一般是用前面的状态去推后面的,也有用后面往前面推的,这时候把循环顺序倒一倒就行了.如果有的题又要从前往后推又要从后 ...

  5. jQuery.fn.extend()

    jQuery.fn.extend() extend()方法是定义在jQuery构造函数的prototype对象上面的一个方法,这样做就能使得所有jQuery对象的实例都能共享这个方法.jQuery构造 ...

  6. Ubuntu16.04如何彻底删除Apache2

    虽然作为运维人员通常情况不建议随意删除Linux系统上面的任何软件,主要指生产环境下,测试环境也不能太随意. 但是有的时候,比如系统环境要变一变,我们就需要替换一些淘汰的软件,对此我们一般都会删除. ...

  7. 史上最详细的codeblocks安装教程!!!

    codeblocks下载地址:https://www.cnblogs.com/yinbiao/p/8489748.html 下面是codeblocks具体的安装教程:

  8. 404 Note Found 队- BETA 版冲刺前准备

    目录 过去存在的问题 任务分工 规范 后端总结 卉卉 家灿 前端总结 绪佩 青元 恺琳 宇恒 丹丹 算法&API接口 家伟 鸿杰 一好 文档&博客撰写 政演 产品功能 我们已经坐了哪些 ...

  9. (一)U盘安装ubuntu18.04.1

    我选择安装的ubuntu18.04.1因为我的显卡是Amd RX470 ,Amd官方所兼容的版本是18.04.1, 跳过的坑:用18.04.2 18.04.3 安装amdgpu驱动各种报错 0X:下载 ...

  10. C语言中数组定义方式

    <1>前言 大家首先来思考一个问题,若是我们想要定义两个变量,求这两个数的平均数,该怎么求呢? 例如:int a = 10,b = 20 int average = (a + b) / 2 ...