LoginSignup
4
2

More than 5 years have passed since last update.

良いか悪いかは別としてCursorNotFoundを防ぐmongoidのno_timeoutメソッドについて

Last updated at Posted at 2018-10-16

前提

mongoidではクエリの実行時間が長い場合に
Moped::Errors::CursorNotFound というエラーが発生してしまいます:fire:

実行時間が長すぎるということは設計にしろ発行するクエリにしろ何らかの見直しが必要なこともあると思います。
しかし、多少実行時間が掛かっても、処理をタイムアウトしたくない場合があります。

例) 何十万件のデータを扱うスクリプトをrakeタスク上で実行する場合

そんな時のためにタイムアウトせずに
mongoidのクエリを実行出来る no_timeout というメソッドがあります!

使用されることが想定されるケース

  • 大量件数に対する繰り返し処理を行う場合
# ここのHogeはモデル
Hoge.no_timeout.each do |hoge|
  繰り返しの中で実行したい処理
end

通常、 .no_timeout を付けない場合、実行に時間が掛かる件数の場合、
eachの途中で Moped::Errors::CursorNotFound になります。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2