MongoDB に次のような大規模なクエリがあるとします (この演習では、1M レコードを返すとします)。
users = Users.where(:last_name => 'Smith')
この結果をループすると、各メンバーを次のように操作します。
users.each do |user|
# Some manipulation to "user"
# Some calculation for "user"
...
# Saving "user"
end
多くの場合、Mongo カーソルのタイムアウトが発生します (予約されているデータベース カーソルがデフォルトのタイムアウトの長さを超えているため)。カーソルのタイムアウトを延長したり、オフにしたりできることはわかっていますが、これが常に最も効率的な方法とは限りません。したがって、これを回避する 1 つの方法は、コードを次のように変更することです。
users = Users.where(:last_name => 'Smith')
user_array = []
users.each do |u|
user_array << u
end
次に、MongoDB のタイムアウトを気にせずに、(Ruby 配列であるため) user_array をループして操作と計算を行うことができます。
これは問題なく動作しますが、もっと良い方法が必要です。誰か提案がありますか?