Docs Menu
Docs Home
/ / /
Ruby MongoDB ドライバー
/

Map-Reduce

Map-Reduceは、大量のデータを集約結果に凝縮するためのデータ処理パラダイムです。

注意

map-reduce 操作は 非推奨です。 集計フレームワークは、map-reduce 操作よりもパフォーマンスとユーザビリティが優れているため、新しい開発に推奨されます。

map-reduce 操作は、ビューでmap_reduceメソッドを呼び出すことで、 Collection#findメソッドから取得されたコレクション ビューで発行されます。 map_reduceメソッドは、mapper、reduce オプション、map-reduce オプションの 3 つの引数を取ります。 マッパーとリダクションは、JavaScript 関数を含む文字列として指定する必要があります。

たとえば、次のコレクションの値が 1 から 10 の場合は次のようになります。

coll = client['foo']
10.times do |i|
coll.insert_one(v: i)
end

次の呼び出しでは、6 未満の値が合計されます。

coll.find(v: {'$lt' => 6}).map_reduce(
'function() { emit(null, this.v) }',
'function(key, values) { return Array.sum(values) }',
).first['value']
# => 15.0

map_reduceメソッドは、 Mongo::Collection::View::MapReduceのインスタンスを返します。これは、操作に使用するパラメータを保持する map-reduce ビューです。 操作を実行するには、結果を反復処理します(例: ビュー オブジェクトのeachfirst 、またはto_aを実行するか、 executeメソッドを呼び出します。 executeメソッドは map-reduce 操作を発行しますが、サーバーから結果セットは返されないため、操作の出力が次のようにコレクションに向けられる場合に主に役立ちます。

coll.find(...).map_reduce(...).out('destination_collection').execute

注意すること:

  • map-reduce の結果がコレクションに指示されない場合、インラインで検索されることがあります。 この場合、結果セット全体が 16 MiB の BSON ドキュメント サイズ制限に収まる必要があります。

  • map-reduce の結果がコレクションに指示され、map-reduce ビューが反復されると、ドライバーはコレクション全体を自動的に検索し、その内容を結果セットとして返します。 コレクションはソートせずに取得されます。 空ではないコレクションに対して map-reduce が実行されている場合、ドライバーは map-reduce 操作の完了後にコレクションに存在するドキュメントを返します。これには、map-reduce の前にコレクションに存在していたドキュメントが含まれる場合がありますの操作です。

coll.find(...).map_reduce(...).out('destination_collection').each do |doc|
# ...
end
coll.find(...).map_reduce(...).out(replace: 'destination_collection', db: 'db_name').each do |doc|
# ...
end

map-reduce ビューの場合、次の方法を使用して構成できます。

方式
説明

js_mode

操作のjsModeフラグを設定します。

out

結果セットを返す代わりに、指定されたコレクションに出力を指示します。

scope

操作の範囲を設定します。

verbose

結果にタイミング情報を含めるかどうかを設定します。

次のアクセス メソッドは ビュー オブジェクトで定義されます。

方式
説明

js_mode

現在のjsModeフラグの値を返します。

map_function

map 関数を string として返します。

out

操作の現在の出力場所を返します。

reduce_function

reduce 関数を string として返します。

scope

操作の現在のスコープを返します。

verbose

結果にタイミング情報を含めるかどうかを返します。

戻る

集計