集計操作は、複数のドキュメントを処理し、計算結果を返します。 集計操作を使用すると、次のことができます。
複数のドキュメントの値をグループ化します。
グループ化されたデータに対して操作を実行して、1 つの結果を返します。
時間の経過に伴うデータの変化を分析します。
データの最新バージョンをクエリします。
MongoDBに組み込まれている集計演算子 を使用すると、データを別のプラットフォームに移動することなく、クラスターで分析を実行できます。
はじめる
集計操作を実行するには、次を使用できます。
MongoDB Atlas でホストされている配置の UI で集計パイプラインを実行できます。
集計パイプライン
集計パイプラインは、ドキュメントを処理する 1 つ以上の ステージで構成されます。これらのドキュメントは、コレクション、ビュー、または特別に設計された ステージから取得されます。
各ステージは、入力ドキュメントに対して操作を実行します。例、 ステージでは $filter ドキュメント、$group ドキュメント、および 値の計算が可能です。ステージが出力するドキュメントは、パイプラインの次のステージに渡されます。
集計パイプラインは、ドキュメントのグループの結果を返す場合があります。「 集計パイプラインによる更新 」に示されているステージを使用して、集計パイプラインでドキュメントを更新することもできます。
注意
aggregation pipelinedb.collection.aggregate()collectionメソッドで実行される は、パイプラインに$merge または$out ステージが含まれていない限り、 内のドキュメントを変更しません。
aggregation pipelineの例
このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードする を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
このパイプラインは、データベース内の最も多くの映画を監督した上位 3 人の監督を検索します。
まず、 ステージを追加して、ドキュメントを監督がリストされている映画にフィルタリングします(監督フィールドが null$match または空のドキュメントを除く)。
{ $match : { "directors" : { $exists: true, $ne: null, $not: {$size: 0} } } },
$matchステージでは、役員情報のない映画をフィルタリングで除外することで、パイプライン内のドキュメント数を削減します。次に、$unwind を使用して監督の配列を分解し、個々の役員ごとに映画をカウントできるようにします。
{ $unwind : "$directors" },
次に、ドキュメントを役員名別に表示し、各役員が行った映画の数をカウントします。$group
{ $group : { _id : "$directors", movieCount : { $sum: 1 } } },
最も多くの映画がある監督を見つけるには、$sort ステージを使用して残りのドキュメントを映画数の降順で並べ替えます。
{ $sort : { movieCount : -1 } },
ドキュメントをソートした後、 ステージを使用して、最も多くの映画を配信した上位 3$limit 人の監督を返します。
{ $limit : 3 }
この例では、完全なパイプラインが示されています 。
db.movies.aggregate( [ { $match : { "directors" : { $exists: true, $ne: null, $not: {$size: 0} } } }, { $unwind : "$directors" }, { $group : { _id : "$directors", movieCount : { $sum: 1 } } }, { $sort : { movieCount : -1 } }, { $limit : 3 } ] )
このパイプラインは、次の結果を返します。
[ { _id: 'Woody Allen', movieCount: 40 }, { _id: 'Martin Scorsese', movieCount: 32 }, { _id: 'Takashi Miike', movieCount: 31 } ]
サンプル入力ドキュメントを含む実行可能な例については、 「完全なaggregation pipelineの例」を参照してください。
集計パイプラインの詳細
集計パイプラインの詳細については、 集計パイプラインを参照してください。
単一目的の集計方法
単一目的の集約方法は、単一のcollectionからドキュメントを集約します。 この方法は単純ですが、 aggregation pipelineの機能が欠けています。
方式 | 説明 |
|---|---|
collectionまたはビュー内のドキュメントのおおよその数を返します。 | |
collectionまたはビュー内のドキュメントの数を返します。 | |
指定されたフィールドに対して異なる値を持つドキュメントの範囲を返します。 |