假设我在 MongoDB 中有一个大型查询(出于本练习的目的,假设它返回 1M 条记录),例如:
users = Users.where(:last_name => 'Smith')
如果我遍历这个结果,与每个成员一起工作,比如:
users.each do |user|
# Some manipulation to "user"
# Some calculation for "user"
...
# Saving "user"
end
我经常会遇到 Mongo 游标超时(因为保留的数据库游标超过了默认的超时长度)。我知道我可以延长光标超时时间,甚至将其关闭——但这并不总是最有效的方法。因此,我解决此问题的一种方法是将代码更改为:
users = Users.where(:last_name => 'Smith')
user_array = []
users.each do |u|
user_array << u
end
然后,我可以遍历 user_array(因为它是一个 Ruby 数组),进行操作和计算,而不用担心 MongoDB 超时。
这很好用,但必须有更好的方法——有人有建议吗?