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

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

以上为实操分享。

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,691评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,310评论 0 10
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,633评论 1 8
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,618评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,907评论 0 9

友情链接更多精彩内容