我想从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版。
答案 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