首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mongodb中删除所有错误位错误的最快方法是什么?

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

Stack Overflow用户
提问于 2019-07-29 23:21:58
回答 2查看 290关注 0票数 2

我想从errbit开始-我们的mongodb数据库中有数百万条记录,而我们没有清理它们。我想重新开始,但我不想丢失我的用户帐户。

我尝试运行这些例程(https://mensfeld.pl/2015/01/making-errbit-work-faster-by-keeping-it-clean-and-tidy/):

代码语言:javascript
复制
bundle exec rake errbit:clear_resolved
代码语言:javascript
复制
desc 'Resolves problems that didnt occur for 2 weeks'
task :cleanup => :environment do
  offset = 2.weeks.ago
  Problem.where(:updated_at.lt => offset).map(&:resolve!)
  Notice.where(:updated_at.lt => offset).destroy_all
end

但是第二个(删除超过2周的问题和通知),似乎永远都在运行。通过mongo shell查询问题和通知集合似乎没有显示任何被删除的内容……我们使用errbit V 0.7.0-dev和mongodb版本3.2.22。

EN

回答 2

Stack Overflow用户

发布于 2019-07-30 00:39:13

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

代码语言:javascript
复制
> db.errs.drop()
true
> db.problems.drop()
true
> db.backtraces.drop()
true
> db.notices.drop()
true
> db.comments.drop()
票数 1
EN

Stack Overflow用户

发布于 2020-03-04 00:17:17

代码语言:javascript
复制
Problem.where(:updated_at.lt => 2.months.ago).destroy_all

由于递归删除错误、通知和评论的N+1问题,运行时间太长,而且mongoid不支持嵌套的急切加载,所以更快删除的唯一方法-是手动获取这些ids并直接删除,而不是回调:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57256872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档