Docs Menu
Docs Home
/ / /
Kotlin Sync ドライバー

集計によるデータの変換

項目一覧

  • Overview
  • 集計操作と検索操作の比較
  • 制限
  • 集計の例
  • 集計パイプラインの構築と実行
  • 集計の説明
  • 詳細情報
  • API ドキュメント

このガイドでは、 Kotlin Sync ドライバー を使用して集計操作を実行する方法を学習できます。

集計操作を使用して MongoDB コレクション内のデータを処理し、計算された結果を返すことができます。 クエリ API の一部である MongoDB 集計フレームワークは、データ処理パイプラインの概念をモデル化したものです。 ドキュメントは 1 つ以上の ステージを含むパイプラインに投入され、各ステージではドキュメントを変換して最終集計結果を出力します。

集計自動車操作は工場に似たものとして考えることができます。 自動車工場の組立ラインには、ドリルや溶接機のような、特定の作業をするための専用工具を備えた組立ステーションがあります。 未加工のパーツが工場に搬入され、組立ラインで完成品に加工、組み立てられます。

集計パイプラインは組み立てライン、集計ステージは組み立てステーション、演算子式は専用ツールです。

検索操作を使用して、次のアクションを実行できます。

  • どのドキュメントを返すかを選ぶ

  • どのフィールドを返すかを選ぶ

  • 結果を並べ替える

集計操作を使用して、次のアクションを実行できます。

  • 検索操作の実行

  • フィールドの名前を変更する

  • フィールドを計算する

  • データを要約する

  • 値をグループ化する

集計操作を使用する場合、次の制限が適用されます。

  • 返されたドキュメントは、 BSON ドキュメント サイズの制限である16メガバイトに違反していない必要があります。

  • パイプライン ステージには、デフォルトで100 MB のメモリ制限があります。 この制限を超えるには、 AggregateIterableクラスの allowDiskUse()メソッドを使用します。

重要

$graphLookup の例外

$graphLookupステージは100メガバイトという厳格なメモリ制限があり、 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": { ... }
...
}
...
}

式演算子の完全なリストを表示するには、 マニュアルの「 集計演算子MongoDB Server 」を参照してください。

集計パイプラインの組み立てと例については、 マニュアルの「 集計パイプライン MongoDB Server」を参照してください。

パイプライン ステージの作成の詳細については、 マニュアルの「 集計ステージMongoDB Server 」を参照してください。

MongoDB操作の説明の詳細については、 マニュアルの「 出力 クエリプラン の説明MongoDB Server 」を参照してください。

Kotlin Sync ドライバーを使用して集計操作を実行する方法の詳細については、次の API ドキュメントを参照してください。

戻る

Atlas & ベクトル検索