Ruby on rails 什么';从mongodb中删除所有错误的最快方法是什么?
我想从errbit开始——我们的mongodb数据库中有数百万条记录,我们没有清理它们。我想重新开始,但我不想失去我的用户帐户 我已尝试运行这些例程():Ruby on rails 什么';从mongodb中删除所有错误的最快方法是什么?,ruby-on-rails,mongodb,errbit,Ruby On Rails,Mongodb,Errbit,我想从errbit开始——我们的mongodb数据库中有数百万条记录,我们没有清理它们。我想重新开始,但我不想失去我的用户帐户 我已尝试运行这些例程(): bundle exec rake errbit:清除\u已解决 desc'解决2周内未出现的问题' 任务:清理=>:环境执行 偏移量=2.5周前 问题.where(:updated_at.lt=>offset).map(&:resolve!) 注意。其中(:updated_at.lt=>offset)。全部销毁 结束 但第二个(删除2周以
bundle exec rake errbit:清除\u已解决
desc'解决2周内未出现的问题'
任务:清理=>:环境执行
偏移量=2.5周前
问题.where(:updated_at.lt=>offset).map(&:resolve!)
注意。其中(:updated_at.lt=>offset)。全部销毁
结束
但第二个(删除2周以上的问题和通知)似乎永远运行。
通过mongo shell查询问题和通知集合似乎不会显示任何正在删除的内容。。。我们使用的是errbit V 0.7.0-dev和mongodb版本3.2.22。最快的方法是获得mongo控制台并删除大部分集合。我建议停止您的errbit服务器,获取mongo控制台,连接到您使用并运行的db:
> db.errs.drop()
true
> db.problems.drop()
true
> db.backtraces.drop()
true
> db.notices.drop()
true
> db.comments.drop()
Problem.where(:updated\u at.lt=>2.months.ago)。全部销毁
运行时间太长,因为递归删除错误、通知和注释时存在N+1问题,而且mongoid不支持嵌套的即时加载,所以删除速度更快的唯一方法是手动获取这些ID并直接删除,无需回调:
problem\u-id=problem.where(:updated\u-at.lt=>2.months.ago.)
err_id=err.where(problem_id:{:$in=>problem_id}).pull(:id)
注意.where(err_id:{:$in=>err_id}).delete_all
Err.where(id:{:$in=>Err_-ids})。全部删除
Comment.where(problem_id:{:$in=>problem_id})。全部删除
Problem.where(id:{:$in=>Problem\u-ids})。全部删除
似乎是一个很好的用例,如果它是一个单一的集合。不幸的是,我不熟悉errbit来提供正确的答案。索引的好处是它触发了数据库端,因此没有数据交换、往返等。