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 ビューです。 操作を実行するには、結果を反復処理します(例: ビュー オブジェクトのeach
、 first
、または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 ビューの場合、次の方法を使用して構成できます。
方式 | 説明 |
---|---|
| 操作の |
| 結果セットを返す代わりに、指定されたコレクションに出力を指示します。 |
| 操作の範囲を設定します。 |
| 結果にタイミング情報を含めるかどうかを設定します。 |
次のアクセス メソッドは ビュー オブジェクトで定義されます。
方式 | 説明 |
---|---|
| 現在の |
| map 関数を string として返します。 |
| 操作の現在の出力場所を返します。 |
| reduce 関数を string として返します。 |
| 操作の現在のスコープを返します。 |
| 結果にタイミング情報を含めるかどうかを返します。 |