需求:
每天定時清除mongodb中某一天之前的數據
思路:
採用shell腳本調用mongodb的命令執行js腳本即可。
步驟:
1.編寫email.js文件,作用:清除mongodb某天之前數據,具體代碼如下:
Date.prototype.format = function(format)
{
var o =
{
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format))
format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
for(var k in o)
if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
return format;
}
function getDay(day){
var today = new Date();
var targetday_milliseconds=today.getTime() + 1000*60*60*24*day;
today.setTime(targetday_milliseconds); //注意,這行是關鍵代碼
var tYear = today.getFullYear();
var tMonth = today.getMonth();
var tDate = today.getDate();
tMonth = doHandleMonth(tMonth + 1);
tDate = doHandleMonth(tDate);
return tYear+"-"+tMonth+"-"+tDate+" 00:00:00";
}
function doHandleMonth(month){
var m = month;
if(month.toString().length == 1){
m = "0" + month;
}
return m;
}
var myDate = new Date();
var datetime = myDate.format("yyyy-MM-dd 00:00:00");
var pre7day = getDay(-7);
print("today="+datetime+"deleteday="+pre7day);
datetime= new Date(datetime);
pre7day= new Date(pre7day);
var count=db.Mail.find({'updateTime':{'$lt':pre7day}}).count();
print("count="+count);
db.Mail.remove({'updateTime':{'$lt':pre7day}});
print('前7天郵件清理完畢...');
exit
2. 編寫shell腳本mongo_clean.sh代碼如下:
#!/bin/bash
#清空mongodb中的前7天郵件: [email protected]
/data/web/mongodb/mongodb-linux-x86_64-2.4.5/bin/mongo 10.3.18.80:27017/mail -quiet /data/web/email.js
注意:/data/web/mongodb/mongodb-linux-x86_64-2.4.5/bin/mongo 必須用全路徑,由於使用root用戶安裝mongodb,但是crontab執行時候,不能直接使用
mongodb-linux-x86_64-2.4.5/bin/mongo 10.3.18.80:27017/mail -quiet /data/web/email.js,否則定時任務不會啓動,由於找不到mongodb而導致。
3.加入crontab中:
10 0 * * * sh /data/web/agx/mongo_clean.sh
即完成shell操作mongodb執行定時任務,根據任務不同,修改對應的js文件。