Ruby Mongo ドライバーの質問:
最初にデータベース全体をメモリにダンプせずに、コレクション内の最後のドキュメントを読み取るまで、一度にコレクションから 5_000 個のドキュメント バッチを出力するにはどうすればよいですか?
これは私にとって本当に悪い方法です:
mongo = MongoClient.new('localhost', 27017)['sampledb']['samplecoll']
@whois.find.to_a....
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