集計操作は、複数のドキュメントを処理し、計算結果を返します。 集計操作を使用すると、次のことができます。
複数のドキュメントの値をグループ化します。
グループ化されたデータに対して操作を実行して、1 つの結果を返します。
時間の経過に伴うデータの変化を分析します。
データの最新バージョンをクエリします。
MongoDBに組み込まれている集計演算子 を使用すると、データを別のプラットフォームに移動することなく、クラスターで分析を実行できます。
はじめる
集計操作を実行するには、次を使用できます。
MongoDB Atlas でホストされている配置の UI で集計パイプラインを実行できます。
集計パイプライン
集計パイプラインは、ドキュメントを処理する 1 つ以上の ステージで構成されます。これらのドキュメントは、コレクション、ビュー、または特別に設計された ステージから取得されます。
各ステージは、入力ドキュメントに対して操作を実行します。例、 ステージでは $filter
ドキュメント、$group
ドキュメント、および 値の計算が可能です。ステージが出力するドキュメントは、パイプラインの次のステージに渡されます。
集計パイプラインは、ドキュメントのグループの結果を返す場合があります。「 集計パイプラインによる更新 」に示されているステージを使用して、集計パイプラインでドキュメントを更新することもできます。
注意
aggregation pipelinedb.collection.aggregate()
collectionメソッドで実行される は、パイプラインに$merge
または$out
ステージが含まれていない限り、 内のドキュメントを変更しません。
aggregation pipelineの例
次の例パイプラインでは、 MongoDB Atlasで利用可能なサンプルデータ、具体的には sample_training.routes
コレクションのドキュメントを使用します。このパイプラインでは、米国アラート(PTX)のポート条件が
まず、$match
ステージを追加して、src_airport
値が PDX
で、かつ stops
がゼロのドキュメントをフィルタリングします。
{ $match : { "src_airport" : "PDX", "stops" : 0 } }
$match
ステージにより、パイプライン内のドキュメント数が 66、985 から 113 に減少します。次に、$group
航空会社名別のドキュメントをし、乗数をカウントします。
{ $group : { _id : { "airline name": "$airline.name", } count : { $sum : 1 } } }
$group
ステージでは、パイプライン内のドキュメント数が 16 航空会社に削減されます。最も多くのルートが利用できる航空会社を見つけるには、$sort
ステージを使用して残りのドキュメントを降順で並べ替えます。
{ $sort : { count : -1 } }
ドキュメントをソートした後、$limit
ステージを使用して、PDB からの最も直接的な影響を提供する上位 3 つの航空会社を返します。
{ $limit : 3 }
この集計パイプラインを通じてドキュメントを sample_training.routes
コレクションに配置すると、PDB からの非停止サービスを提供している上位 3 つの航空会社は、それぞれ、39、17、13 ルートを含む地理的フィールド。
完全なパイプラインは次のようになります。
db.routes.aggregate( [ { $match : { "src_airport" : "PDX", "stops" : 0 } }, { $group : { _id : { "airline name": "$airline.name", } count : { $sum: 1 } } }, { $sort : { count : -1 } }, { $limit : 3 } ] )
サンプル入力ドキュメントを含む実行可能な例については、 「完全なaggregation pipelineの例」を参照してください。
集計パイプラインの詳細
集計パイプラインの詳細については、 集計パイプラインを参照してください。
単一目的の集計方法
単一目的の集約方法は、単一のcollectionからドキュメントを集約します。 この方法は単純ですが、 aggregation pipelineの機能が欠けています。
方式 | 説明 |
---|---|
collectionまたはビュー内のドキュメントのおおよその数を返します。 | |
collectionまたはビュー内のドキュメントの数を返します。 | |
指定されたフィールドに対して異なる値を持つドキュメントの範囲を返します。 |