Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么';从mongodb中删除所有错误的最快方法是什么?_Ruby On Rails_Mongodb_Errbit - Fatal编程技术网

Ruby on rails 什么';从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周以

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

我已尝试运行这些例程():

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来提供正确的答案。索引的好处是它触发了数据库端,因此没有数据交换、往返等。