mongodb上一個collection數據已經膨脹到13億,也就最近一兩個月的數據重要一點。於是考慮清除一下這個collection。
於是:
第一步:
先將原表備份
db.test.renameCollection("test_bak")
然後根據時間刪除數據
db.test_bak.remove({"createtime":{"$lte":ISODate("2019-06-09T00:00:00.000Z")}})
將兩個月前的數據全部清掉。
執行到這一步發現,現實很殘酷,基本上命令是卡死狀態。
查看collection上的索引:
db.test_bak.getIndexes()
發現createtime沒有索引,於是乎加上:
db.test_bak.createIndex({"createtime":-1})
加索引這一步也要執行很久,慢慢等吧。
等到索引添加成功再次執行刪除數據的命令即可,也將執行很久。
通過:
db.test_bak.count()
查看還剩多少數據。
由於test_bak已經沒有新的數據寫入,還需要將最近兩個月的數據同步到test中,於是:
db.test_bak.find({"createtime":{"$gte":ISODate("2019-06-09T00:00:00.000Z")}}).forEach(function(x){
db.test.insert(x);
})
等待慢慢執行吧.....
以上爲實操分享。
所在在一開始就應該設置,無用的數據自動清理掉。
也就沒有後面頭疼的問題了。