您的位置:首页 > 数据库 > Mongodb

mongodb删除过期数据

2017-08-29 17:51 453 查看
通常,你往某一个mongo库中插数据,然后按日轮询,最终这个数据会越来越多,对于不用的数据需要进行清理。这篇文章主要将如何清理过期数据。

举个例子:你只需要最近2个月的数据,比如今天是20170829,那么60天之前的数据都可以清理掉。你可以写一个crontab任务,然后导入脚本,每天执行一次,将60天之前的所有数据进行删除。

假如你的collections为如下形式: test20170836  

代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
脚本:删除过期的数据

"""
import pymongo
from datetime import datetime, timedelta

COL_PRE = "test"

G_CONFIG_TYPE = "online"

config = {
'MONGODB_DATABASE': {
"host": "X.X.X.X",
"port": X,
"username": "XXX",
"password": "XXX",
"db": "XXXX",
}
}
config_online = {
'MONGODB_DATABASE': {
"host": "127.0.0.1",
"port": XXXX,
"username": "XXX",
"password": "XXX",
"db": "XXX",
}
}

# mongoClient
def get_mongo_db():
if G_CONFIG_TYPE == "online":
config_type = config_online
else:
config_type = config
app_mongodb_config = config_type['MONGODB_DATABASE']
mongo_client = pymongo.MongoClient(app_mongodb_config['host'],
app_mongodb_config['port'])
mongo_db = mongo_client[app_mongodb_config['db']]
mongo_db.authenticate(app_mongodb_config['username'],
app_mongodb_config['password'])
return mongo_db

def del_data(live_date):
"""
过期数据清理 删除2个月前的数据 每天一个集合
"""
mongodb = get_mongo_db()
col_online = COL_ONLINE_PRE + live_date

for collection in mongodb.collection_names():
if str(collection).find("test20") != -1 and len(str(collection)) == len("test20161209") and str(collection) <= col_online:
delonline_flag = mongodb[collection].drop()
print 'del %s status:%s .' % (collection, delonline_flag)

if __name__ == "__main__":
now = datetime.now()
days = 60
twomonthago = now - timedelta(days=days)
livedate = twomonthago.strftime("%Y%m%d")
del_data(livedate)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: