module Mongokit::FindInBatch

Example

Order.in_batches do |orders|
  orders.each do |order|
    puts order.items
  end
end

Order.in_batches(batch_size: 100, start: 50) do |orders|
  ...
end

Order.where(:created_at.gt => Time.now.yesterday).in_batches do |orders|
  ...
end

Public Instance Methods

in_batches(options = {}) { |records| ... } click to toggle source
# File lib/mongokit/find_in_batch.rb, line 19
def in_batches(options = {})
  criteria = self
  start = options[:start]
  batch_size = options[:batch_size] || 1000

  criteria = criteria.limit(batch_size)
  records = start ? criteria.offset(start).to_a : criteria.to_a
  current_offset = start.to_i

  while records.any?
    records_size = records.size
    current_offset += records_size

    yield records

    break if records_size < batch_size

    records = criteria.offset(current_offset).to_a
  end
end