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