關鍵詞: expireAfterSeconds、TTL測試
TTL Time to Livespa
相似Redis中的expire機制,MongoDB也能夠設置過時自動刪除的表。code
MongoDB的過時設置依賴索引(TTL-index),設置過時字段使用的索引後,插入數據時在該字段指定日期時間,blog
通過在建立索引時指定的秒數後,該記錄會被MongoDB認爲已通過期,而後刪除。索引
JS版class
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版test
建立索引和指定過時時間的方式相似,要注意的是過時時間的字段必須使用UTC時間,不然沒法正常刪除記錄
所以指定過時時間刪除雖然也能夠起做用,可是不能肯定刪除時間很是精確。import
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刪除數據機制的問題。cli