Map-Reduce
注意
代替手段としての集計パイプライン
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 操作について考えてみます。
この map-reduce 操作では、MongoDB は各入力ドキュメント(つまり、クエリ条件にマッチするコレクション内のドキュメント)に map フェーズを適用します。map 関数は、キーと値のペアを出力します。複数の値を持つキーに対して、MongoDB は集計データを収集して圧縮する reduce フェーズを適用します。その後、MongoDB により結果がコレクションに格納されます。オプションとして、reduce 関数の出力を finalize 関数に渡して、集計の結果をさらに圧縮または処理することもできます。
MongoDB のすべての map-reduce 関数は JavaScript であり、 mongod
プロセス内で実行されます。map-reduce 操作は、単一のコレクションのドキュメントを入力として受け取り、マップ ステージを開始する前に任意の並べ替えと制限を実行できます。mapReduce
により、map-reduce 操作の結果をドキュメントとして返すことも、結果をコレクションに書き込むこともできます。
注意
map-reduce は、MongoDB Atlas の無料クラスターと MongoDB Atlas サーバーレスインスタンスではサポートされていません。
Map-Reduce JavaScript 関数
MongoDB では、 map-reduce 操作はカスタム JavaScript 関数を使用して値をキーにマッピングする、または関連付けます。キーに複数の値がマップされている場合、この操作ではキーの値を 1 つのオブジェクトに減らします。
カスタム JavaScript 関数を使用すると、map-reduce 操作を柔軟に行うことができます。たとえば、ドキュメントを処理する場合、map 関数は複数のキーと値のマッピングを作成することも、作成しないこともできます。map-reduce 操作では、カスタム JavaScript 関数を使用して、マッピングや削減操作の最後に結果に対して追加の計算をするなど、最後の変更を行うこともできます。
Map-Reduce の結果
MongoDB では、map-reduce 操作によって結果をコレクションに書き込むか、結果をインラインで返すことができます。コレクションに map-reduce 出力を書き込むと、同じ入力コレクションに対して後続の map-reduce 操作を実行して、新しい結果を以前の結果とマージ、置換、または削減できます。詳細と例については、 mapReduce
および「map-reduce の増分実行」を参照してください。
map-reduce 操作の結果をインラインで返す場合、結果ドキュメントはBSON ドキュメント サイズの制限(現在は 16 MB)内に収まっている必要があります。map-reduce 操作の制限と制約に関する追加情報については、 mapReduce リファレンス ページを参照してください。
シャーディングされたコレクション
MongoDB は、シャーディングされたコレクションのmap-reduce 操作をサポートしています。
ビュー
ビューでは map-reduce 操作をサポートしていません。