2012-02-08 3 views
0

В настоящее время мы имеем этот пакетного кода с использованием MongoMapper, который до сих пор занимает больше времени, чем хотелось бы:Укажите поля, которые будут возвращены с помощью find_each?

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 

Изменение размера партии не помогло, поэтому мы ищем другие идеи.

Спасибо!

ответ

1

fields фильтр MongoMapper должен нормально работать с find_each. Но, когда он используется в конце цепочки запросов, find_each возвращает нумератор вместо вызова блока, так что вы должны добавить дополнительный .each:

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

Отредактированный ответ: вам нужно дополнительное '.each' на конце. Кажется, неправильно, поэтому я подал ошибку: https://github.com/jnunemaker/mongomapper/i ОПРОСЫ/386 –

3

попробовать

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

Извините, я забыл упомянуть, что я использую MongoMapper, чтобы синтаксис не работал ... – Chris

Смежные вопросы