MongoDB\Collection::mapReduce()
バージョン 1.12 以降非推奨。
バージョン 1.2 の新機能.
定義
MongoDB\Collection::mapReduce()
mapReduceコマンドを使用すると、コレクションに対して map-reduce 集計操作を実行できます。
function mapReduce( MongoDB\BSON\JavascriptInterface $map, MongoDB\BSON\JavascriptInterface $reduce, string|array|object $out, array $options = [] ): MongoDB\MapReduceResult
パラメーター
$map
: MongoDB\BSON\Javascript値をキーに関連付けたり「マッピング」したり、キーと値のペアを出力したりする JavaScript 関数。
注意
スコープ付きのJavaScriptインスタンスを渡すことは非推奨です。 すべてのスコープ変数を MapReduce 操作の
scope
オプションに配置します。$reduce
: MongoDB\BSON\Javascript特定のキーに関連付けられたすべての値を 1 つのオブジェクトに「reduce」する JavaScript 関数。
注意
スコープ付きのJavaScriptインスタンスを渡すことは非推奨です。 すべてのスコープ変数を MapReduce 操作の
scope
オプションに配置します。$out
: string|array|object- map-reduce 操作の結果を出力する場所を指定します。 コレクションに出力することも、結果をインラインで返すこともできます。 レプリカセットのプライマリ メンバーでは、コレクションまたはインラインでの出力が可能ですが、セカンダリでは、インライン出力のみが可能です。
$options
: 配列必要なオプションを指定する配列。
名前タイプ説明bypassDocumentValidationブール値true
の場合、書込み操作によってドキュメント レベルの検証を回避できます。 デフォルトはfalse
です。これは、結果がコレクションに出力される場合にのみ適用されます。
collationarray|object照合順序を指定すると、大文字や小文字、アクセント記号など、string を比較するための言語独自のルールを指定できます。 照合を指定する場合、
locale
フィールドは必須です。その他の照合フィールドはすべてオプションです。 フィールドの説明については、 「照合ドキュメント」 を参照してください。照合が指定されていないが、コレクションにデフォルトの照合がある場合、操作はコレクションに指定された照合を使用します。 コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって string が比較されます。
comment混合データベースプロファイラ、 currentOp出力、およびログから操作を追跡するのに役立つ任意のコメントを指定できるようにします。
このオプションは MongoDB 4.4 以降で使用可能であり、古いサーバー バージョンで指定すると実行時に例外が発生します。
バージョン 1.13 の新機能。
finalizereduce メソッドに従って、出力を変更します。
スコープ付きのJavaScriptインスタンスを渡すことは非推奨です。 すべてのスコープ変数を MapReduce 操作の
scope
オプションに配置します。jsModeブール値map 関数と reduce 関数の実行の間に中間データを BSON 形式に変換するかどうかを指定します。limitintegermap 関数に入力するドキュメントの最大数を指定します。maxTimeMSintegerカーソルに対する情報処理操作の累積時間制限(ミリ秒単位)。 MongoDB は、次の割り込みポイントが最も近い時点で操作を中止します。
クエリarray|objectmap 関数への入力ドキュメントを決定するための選択基準を クエリ演算子 を使用して指定します。ReadConcern操作に使用する読み取り保証。 デフォルトはコレクションの読み取り保証 (read concern) です。
トランザクションの一部である個々の操作に対して読み取り保証を指定することはできません。 代わりに 、トランザクションを開始する ときに
readConcern
オプションを設定します。readPreference操作に使用する読み取り設定。 コレクションの読み込み設定(read preference)がデフォルトで設定されます。
このオプションは、結果がコレクションに出力される場合、無視されます。
scopearray|objectmap、reduce、 finalize 関数でアクセス可能なグローバル変数を指定します。セッション操作に関連付けるクライアント セッション。
バージョン 1.3 で追加。
sortarray|object結果の順序の並び替え指定。typeMap配列型マップ カーソルに適用される 。これは、BSON ドキュメントが PHP 値に変換される方法を決定します。コレクションのタイプ マップがデフォルトになります。
verboseブール値結果情報にタイミング情報を含めるかどうかを指定します。writeConcern操作に使用する書込み保証 ( write concern )。 コレクションの書込み保証 (write concern) のデフォルトです。
トランザクションの一部である個々の操作に対して書込み保証 (write concern) を指定することはできません。 代わりに 、トランザクションを開始する ときに
writeConcern
オプションを設定します。
Return Values
MongoDB\MapReduceResult
オブジェクト。出力方法(例: インライン 、コレクション)を経由した インターフェースを使用します。コマンド統計へのアクセスも提供します。
エラーと例外
MongoDB\Exception\UnsupportedException
オプションが使用され、選択したサーバーでサポートされていない場合(例: collation
、 readConcern
、 writeConcern
)。
MongoDB\Exception\InvalidArgumentException
は、パラメータまたはオプションの解析に関連するエラーの場合は です。
MongoDB\Exception\UnexpectedValueException
サーバーからのコマンド応答が不正な形式であった場合、。
MongoDB\Driver\Exception\RuntimeException 拡張レベルのその他のエラー(例:)。
動作
MongoDB では、map-reduce 操作によって結果をコレクションに書き込むか、結果をインラインで返すことができます。 コレクションに map-reduce 出力を書き込むと、同じ入力コレクションに対して後続の map-reduce 操作を実行して、新しい結果を以前の結果とマージ、置換、または削減できます。 詳細と例については、「 map-reduce 」および「 map-reduce の増分実行 」を参照してください。
map-reduce 操作の結果をインラインで 返す場合、結果ドキュメントはBSON ドキュメント サイズの制限内に収まっている必要があります。制限は現在16 MB です。
MongoDB は、 シャーディングされたコレクションのmap-reduce 操作をサポートしています。 map-reduce 操作では、結果をシャーディングされたコレクションに出力することもできます。 「 map-reduce コレクションとシャーディングされたコレクション 」を参照してください。
例
この例では、都市の人口を使用して各州の総人口を計算します。
$collection = (new MongoDB\Client)->test->zips; $map = new MongoDB\BSON\Javascript('function() { emit(this.state, this.pop); }'); $reduce = new MongoDB\BSON\Javascript('function(key, values) { return Array.sum(values) }'); $out = ['inline' => 1]; $populations = $collection->mapReduce($map, $reduce, $out); foreach ($populations as $pop) { var_dump($pop); };
出力は次のようになります。
object(stdClass)#2293 (2) { ["_id"]=> string(2) "AK" ["value"]=> float(544698) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AL" ["value"]=> float(4040587) } object(stdClass)#2293 (2) { ["_id"]=> string(2) "AR" ["value"]=> float(2350725) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AZ" ["value"]=> float(3665228) }
その他の参照
MongoDB マニュアルのmapReduceコマンドに関する参考資料
MongoDB マニュアルのMap-Reduceに関するドキュメント