0

Ruby Mongo ドライバーの質問:

最初にデータベース全体をメモリにダンプせずに、コレクション内の最後のドキュメントを読み取るまで、一度にコレクションから 5_000 個のドキュメント バッチを出力するにはどうすればよいですか?

これは私にとって本当に悪い方法です

mongo = MongoClient.new('localhost', 27017)['sampledb']['samplecoll']
@whois.find.to_a....
4

1 に答える 1

1

Mongo::Collection#find は列挙可能な Mongo::Cursor を返します。バッチ処理の場合、 Enumerable#each_slice はあなたの友人であり、ツールキットに追加する価値があります。

あなたがこれを好きであることを願っています。

find_each_slice_test.rb

require 'mongo'
require 'test/unit'

class FindEachSliceTest < Test::Unit::TestCase
  def setup
    @samplecoll = Mongo::MongoClient.new('localhost', 27017)['sampledb']['samplecoll']
    @samplecoll.remove
  end

  def test_find_each_slice
    12345.times{|i| @samplecoll.insert( { i: i } ) }
    slice__max_size = 5000
    @samplecoll.find.each_slice(slice__max_size) do |slice|
      puts "slice.size: #{slice.size}"
      assert(slice__max_size >= slice.size)
    end
  end
end

ruby find_each_slice_test.rb

Run options: 

# Running tests:

slice.size: 5000
slice.size: 5000
slice.size: 2345
.

Finished tests in 6.979301s, 0.1433 tests/s, 0.4298 assertions/s.

1 tests, 3 assertions, 0 failures, 0 errors, 0 skips
于 2013-01-31T17:52:25.110 に答える