1. 程式人生 > >mongodb刪除過期資料

mongodb刪除過期資料

通常,你往某一個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)