在Mongoid中获取更改查询

时间:2014-08-01 10:16:23

标签: ruby-on-rails ruby mongodb mongoid

我有一个大型测试套件,可以在每次测试后恢复整个MongoDB数据库,它的工作方式类似于Rails灯具。这个套件还包含许多只读测试,所以我做了不必要的恢复,这会降低性能。以某种方式标记这些测试会起作用,但我倾向于忘记它并且它更加麻烦然后有用。但是,只有在完成某些更改操作后,才能通过运行恢复过程(mongodump和mongorestore)来大幅提高性能。所以我的问题是:

有没有办法获得自特定时间点以来执行的所有(改变)Mongoid查询(或至少是计数)?也许从日志中,也许Mongoid有一些内部反击......

1 个答案:

答案 0 :(得分:0)

MongoDB的命令serverStatus返回完成的操作数,因此我可以很容易地将它们连接起来:

class ActiveSupport::TestCase
  setup do
    @opcounters = opcounters
  end

  teardown do
    if opcounters != @opcounters
      system "mongorestore --drop #{File.expand_path('../tmp',  __FILE__)} > /dev/null 2>&1"
    end
  end

private
  def opcounters
    Mongoid::Sessions.default.command(serverStatus: 1).fetch('opcounters').slice('insert', 'update', 'delete')
  end
end

顺便说一句,这使我的测试成绩提高了50%以上。