Overview
このガイドでは、 Kotlin Sync ドライバー を使用して集計操作を実行する方法を学習できます。
集計操作を使用して MongoDB コレクション内のデータを処理し、計算された結果を返すことができます。 クエリ API の一部である MongoDB 集計フレームワークは、データ処理パイプラインの概念をモデル化したものです。 ドキュメントは 1 つ以上の ステージを含むパイプラインに投入され、各ステージではドキュメントを変換して最終集計結果を出力します。
集計自動車操作は工場に似たものとして考えることができます。 自動車工場の組立ラインには、ドリルや溶接機のような、特定の作業をするための専用工具を備えた組立ステーションがあります。 未加工のパーツが工場に搬入され、組立ラインで完成品に加工、組み立てられます。
集計パイプラインは組み立てライン、集計ステージは組み立てステーション、演算子式は専用ツールです。
集計操作と検索操作の比較
検索操作を使用して、次のアクションを実行できます。
どのドキュメントを返すかを選ぶ
どのフィールドを返すかを選ぶ
結果を並べ替える
集計操作を使用して、次のアクションを実行できます。
検索操作の実行
フィールドの名前を変更する
フィールドを計算する
データを要約する
値をグループ化する
制限
集計操作を使用する場合、次の制限が適用されます。
返されたドキュメントは、 BSON ドキュメント サイズの制限である16メガバイトに違反していない必要があります。
パイプライン ステージには、デフォルトで100 MB のメモリ制限があります。 この制限を超えるには、
AggregateIterable
クラスのallowDiskUse()
メソッドを使用します。
集計の例
このセクションの例では、 Atlas サンプル データセットのsample_restaurants
データベースのrestaurants
コレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。
次の Kotlin データ クラスは、このコレクション内のドキュメントをモデル化します。
data class Restaurant( val name: String, val cuisine: String, val borough: String )
集計パイプラインの構築と実行
コレクション内のドキュメントに対して集計を実行するには、集計ステージのリストをaggregate()
メソッドに渡します。
この例では、ニューヨーク市の各地区のケーキの数を出力します。 次のコードでは、次のステージを含む集計パイプラインが作成されます。
$matchステージで、
cuisine
フィールドの値が"Bakery"
であるドキュメントをフィルタリングします。一致するドキュメントを
borough
フィールドでグループ化し、そのフィールドの個別の値ごとにドキュメントの数を生成する$groupステージ。
注意
次の例では、ビルダー パターンを使用して集計パイプラインライン のステージを実装します。ビルダ パターンの使用方法の詳細については、データ クラスでビルダを使用する を参照してください。
val pipeline = listOf( Aggregates.match(Filters.eq(Restaurant::cuisine.name, "Bakery")), Aggregates.group("\$borough", Accumulators.sum("count", 1)) ) val results = collection.aggregate<Document>(pipeline) results.forEach { result -> println(result) }
Document{{_id=Bronx, count=71}} Document{{_id=Manhattan, count=221}} Document{{_id=Brooklyn, count=173}} Document{{_id=Queens, count=204}} Document{{_id=Staten Island, count=20}} Document{{_id=Missing, count=2}}
Tip
$group
集計ステージのグループキーを指定する場合は、 \
文字を使用してすべての$
文字をエスケープするようにします。
集計の説明
MongoDB が操作を実行する方法に関する情報を表示するには、パイプラインに$explain
集計ステージを含めることができます。 MongoDB が操作を説明すると、実行プランとパフォーマンス統計が返されます。 実行プランは、MongoDB が操作を完了できる潜在的な方法です。 MongoDB に操作を説明するように指示すると、その操作のために MongoDB が選択したプランと拒否された実行プランの両方が返されます。
次のコード例では、前のセクションと同じ集計を実行し、操作の詳細を出力するために$explain
ステージを追加します。
print(collection.aggregate(pipeline).explain())
{ "explainVersion": "2", "queryPlanner": { "namespace": "sample_restaurants.restaurants" "indexFilterSet": false, "parsedQuery": { "cuisine": {"$eq": "Bakery"} }, "queryHash": "865F14C3", "planCacheKey": "0697561B", "optimizedPipeline": true, "maxIndexedOrSolutionsReached": false, "maxIndexedAndSolutionsReached": false, "maxScansToExplodeReached": false, "winningPlan": { ... } ... } ... }
Atlas Search
次のいずれかのパイプラインステージを含む集計パイプラインを作成して実行中ことで、Atlas Search クエリを実行できます。
$search
$searchMeta
Atlas Searchパイプラインステージの詳細については、Atlas ドキュメントの集計パイプライン ステージの選択を参照してください。Kotlin Syncドライバーを使用して Atlas Searchパイプライン検索ステージを作成する例については、「 Atlas Search クエリの実行 」ガイドを参照してください。
詳細情報
式演算子の完全なリストを表示するには、 マニュアルの「 集計演算子MongoDB Server 」を参照してください。
集計パイプラインの組み立てと例については、 マニュアルの「 集計パイプライン MongoDB Server」を参照してください。
パイプライン ステージの作成の詳細については、 マニュアルの「 集計ステージMongoDB Server 」を参照してください。
MongoDB操作の説明の詳細については、 マニュアルの「 出力 と クエリプラン の説明MongoDB Server 」を参照してください。
API ドキュメント
Kotlin Sync ドライバーを使用して集計操作を実行する方法の詳細については、次の API ドキュメントを参照してください。