mongodb刪除過期資料
阿新 • • 發佈:2018-12-31
通常,你往某一個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)