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