注意
代替手段としての集計パイプライン
MongoDB 5 . 0以降、 map-reduce は非推奨になりました。
map-reduce の代わりに、 集計パイプラインを使用する必要があります。集計パイプラインは、map-reduce よりもパフォーマンスとユーザビリティが優れています。
$group$mergeなどの集約パイプライン ステージ を使用して、map-reduce操作を書き換えることができます。カスタム機能を必要とする map-reduce 操作には、
$accumulatorと$functionの集計演算子を使用できます。 これらの演算子を使用して、JavaScript でカスタム集計式を定義できます。
map-reduce を集計パイプラインに置き換える例については、以下を参照してください。
MongoDB Atlas でホストされている配置の UI で集計パイプラインを実行できます。
map-reduce は、大量のデータを集約結果に凝縮するためのデータ プロセシング パラダイムです。map-reduce 操作を実行するため、MongoDB はmapReduceデータベースコマンドを提供しています。
次の map-reduce 操作について考えてみます。
MongoDB は、各入力ドキュメント(クエリ条件にマッチするコレクション内のドキュメント)に map フェーズを適用します。map 関数はキーと値のペアを出力します。複数の値を持つキーに対して、MongoDB はデータを収集して圧縮する reduce フェーズを適用し、その結果をコレクションに保存します。reduce 関数の出力は、必要に応じて finalize 関数を通して、結果をさらに処理できます。
MongoDB のすべての map-reduce 関数は JavaScript であり、mongod プロセス内で実行されます。map-reduce 操作は単一のコレクションを入力として受け取り、マップ ステージの前に並べ替えと制限を適用できます。mapReduce は結果をドキュメントとして返すことができます。またはコレクションに書き込むこともできます。
注意
map-reduce は、 MongoDB Atlas無料および Flex クラスターではサポートされていません。
Map-Reduce JavaScript 関数
map-reduce 操作では、カスタム JavaScript 関数を使用して値をキーにマップします。キーに複数の値がある場合、操作ではそれらを 1 つのオブジェクトに減らします。map 関数は複数のキーと値のペアを出力することも、出力しないこともできます。任意の finalize 関数では、結果にさらに変更を加えることができます。
Map-Reduce の結果
map-reduce 操作では、結果をコレクションに書き込むか、インラインで返すことができます。結果をコレクションに書き込む場合は、同じ入力コレクションに対して後続の map-reduce 操作を実行して、新しい結果を以前の結果と置換、マージ、または削減することができます。例については、「mapReduce」と「増分型 map-reduce の実行」を参照してください。
結果を インライン で返す場合、結果ドキュメントは BSON ドキュメント サイズの制限(16 メビバイト)内に収まっている必要があります。その他の制限と制約については、mapReduceを参照してください。
シャーディングされたコレクション
MongoDB は、シャーディングされたコレクションのmap-reduce 操作をサポートしています。
ビュー
ビューでは map-reduce 操作をサポートしていません。