mongodb13亿数据清理记录

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);
})

等待慢慢执行吧.....

以上为实操分享。

所在在一开始就应该设置,无用的数据自动清理掉。
也就没有后面头疼的问题了。

你可能感兴趣的:(mongodb13亿数据清理记录)