1、测试环境导入bson数据
将数据导入mongodb的测试环境中,使用如下命令, -d表示数据库名称,默认文件名作为 collections 的名称
mongoimport -d test --file chat_item.bson
导入进去的数据日期类型被转换成为了字符串,需要进行转换为日期才能进行比较
db.chat_item.find().forEach(function(data) {
data.createTime= new ISODate(data.createTime);
db.chat_item.save(data);
});
2、 写js脚本
var beforeDay = 7; // 要清理N天之前的数据
var beforeMill = beforeDay * 24 * 60 * 60 * 1000; // 将N天转换为毫秒值
var currentTimeMill = (new Date()).valueOf() ; //将当天转换为毫秒值
var count=db.chat_item.find({'createTime':{'$lt':new Date(currentTimeMill - beforeMill)}}).count(); // 记录删除的条数 (N天前的数据)
db.chat_item.remove({'createTime':{'$lt':new Date(currentTimeMill - beforeMill)}}); //进行删除
print(count + '条清理完毕...');
因为ISODate是格林威治时间,可能差8个小时,这个还没有测试,如果差8小时,在对毫秒值进行加减。
3、使用crontab
0 0 * * * echo /opt/soft/mongodb/mongodb-linux-x86_64-4.0.10/bin/mongo --quiet /opt/soft/mongodb/mongodb-linux-x86_64-4.0.10/script/test.js
这个写好了因为暂时不需要了,所以没有详细测试,待测试后再进行修改此文章。
经过简单测试,确实是比格林威治时间快了8个小时,少删除了8个小时的数据,那么把当前时间 再减去 8个小时的毫秒值即可。