前提
mongoidではクエリの実行時間が長い場合に
Moped::Errors::CursorNotFound
というエラーが発生してしまいます
実行時間が長すぎるということは設計にしろ発行するクエリにしろ何らかの見直しが必要なこともあると思います。
しかし、多少実行時間が掛かっても、処理をタイムアウトしたくない場合があります。
例) 何十万件のデータを扱うスクリプトをrakeタスク上で実行する場合
そんな時のためにタイムアウトせずに
mongoidのクエリを実行出来る no_timeout
というメソッドがあります!
使用されることが想定されるケース
- 大量件数に対する繰り返し処理を行う場合
# ここのHogeはモデル
Hoge.no_timeout.each do |hoge|
繰り返しの中で実行したい処理
end
通常、 .no_timeout
を付けない場合、実行に時間が掛かる件数の場合、
eachの途中で Moped::Errors::CursorNotFound
になります。