使用find_each指定要返回的字段?

时间:2012-02-08 23:36:24

标签: ruby-on-rails performance find mongomapper

我们目前使用MongoMapper创建这个批处理代码,但仍然需要比我们想要的更长的时间:

User.find_each(conditions: {is_active: true}, batch_size: 500) do |user|
  # simple stuff that only requires a couple fields from user
end

有没有办法告诉它只返回我们需要的用户模型字段,就像你可以用非批量查找一样?

User.where(is_active:true).fields(:field1, :field2).all

更改批量大小没有帮助,所以我们正在寻找其他想法。

谢谢!

2 个答案:

答案 0 :(得分:3)

尝试

User.where(is_active:true).select("field1, field2").find_each { |user| p user }

答案 1 :(得分:1)

MongoMapper的fields过滤器可以与find_each一起使用。但是,当在查询链的末尾使用时,find_each返回一个枚举器而不是调用块,因此你必须添加一个额外的.each

User.where(is_active:true).fields(:field1, :field2).find_each.each { |user| ...}