集計パイプラインとシャーディングされたコレクション
集計パイプラインは、 のシャーディングされたコレクションに対する操作をサポートしています。 このセクションでは、集計パイプラインとシャーディングされたコレクションに固有の動作について説明します。
動作
パイプラインが$match
シャードキー の正確な で開始され、かつパイプラインに }$out
$lookup
ステージまたは ステージが含まれていない場合、パイプライン全体は一致するシャードでのみ実行されます。
集計操作が複数のシャードで実行される場合、次の場合を除き、結果はマージされるmongos
にルーティングされます。
パイプラインに
$out
ステージが含まれている場合、マージは出力コレクションが存在するシャードで実行されます。パイプラインにシャーディングされていないコレクションを参照する
$lookup
ステージがパイプラインに含まれている場合、マージはシャーディングされていないコレクションが存在するシャードで実行されます。パイプラインにソートまたはグループ化のステージが含まれており、 allowDiskUse設定が有効になっている場合、マージはランダムに選択されたシャードで実行されます。
最適化
集計パイプラインを 2 つの部分に分割する場合、パイプラインは分割され、最適化を考慮して可能な限り多くのステージがシャードで実行されるようになります。
パイプラインがどのように分割されたかを確認するには、 メソッドにexplain
db.collection.aggregate()
オプションを含めます。
最適化はリリースに応じて変更される場合があります。