我们目前使用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
更改批量大小没有帮助,所以我们正在寻找其他想法。
谢谢!
答案 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| ...}