从mongodb删除所有errbit错误的最快方法是什么?

时间:2019-07-29 15:21:58

标签: mongodb errbit

我想从errbit开始-我们的mongodb数据库中有数百万条记录,而我们并未对其进行清理。我想重新开始,但是我不想丢失我的用户帐户。

我已经尝试运行这些例程(https://mensfeld.pl/2015/01/making-errbit-work-faster-by-keeping-it-clean-and-tidy/),但是第二个例程(删除了超过2周的问题和通知)似乎永远运行了。通过mongo shell查询问题和通知集合似乎没有显示任何被删除...我们正在使用errbit V 0.7.0-dev和mongodb 3.2.22版。

2 个答案:

答案 0 :(得分:0)

最快的方法是获得一个mongo控制台并删除大多数集合。我会说停止您的errbit服务器,获得一个mongo控制台,连接到您使用的数据库并运行:

create table my_table(...);

copy my_table
from 's3://my_bucket/my_prefix/data.txt'
iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>'
region 'us-west-2';

答案 1 :(得分:0)

Problem.where(:updated_at.lt => 2.months.ago).destroy_all

由于N + 1问题导致递归删除Err,Notice和Comment的时间太长,而且mongoid还不支持嵌套的紧急加载,因此唯一的删除方法是更快-手动获取这些ID并直接删除而没有回调:

problem_ids = Problem.where(:updated_at.lt => 2.months.ago).pluck(:id)
err_ids = Err.where(problem_id: {:$in => problem_ids}).pluck(:id)

Notice.where(err_id:{:$in => err_ids}).delete_all
Err.where(id:{:$in => err_ids}).delete_all
Comment.where(problem_id: {:$in => problem_ids}).delete_all
Problem.where(id: {:$in => problem_ids}).delete_all