AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

集計

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

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

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

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

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

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

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

  • 結果を並べ替える

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

  • 検索操作の実行

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

  • フィールドを計算する

  • データを要約する

  • 値をグループ化する

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

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

  • パイプライン ステージには、デフォルトで 100 メガバイトのメモリ制限があります。allowDiskUse オプションを true に設定することで、この制限を超えることができます。

重要

$graphLookup の例外

$graphLookupステージは100メガバイトという厳格なメモリ制限があり、 allowDiskUseオプションを無視します。

このガイドの例では、Atlas のサンプルデータセットから、sample_restaurantsデータベースのrestaurantsコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDBを使い始めるガイド を参照してください 。

Tip

完全な集計チュートリアル

サーバー マニュアルの「完全な集計パイプライン チュートリアル」のセクションには、一般的な集計タスクの詳細を説明するチュートリアルがあります。チュートリアルを選択し、ページの右上隅にある Select your language ドロップダウン メニューから C を選択します。

コレクション内のドキュメントに対して集計を実行するには、パイプラインステージを表す bson_t 構造を mongoc_collection_aggregate() 関数に渡します。

この例では、ニューヨーク市の各地区のケーキの数を出力します。 次のコードでは、次のステージを含む集計パイプラインが作成されます。

  • $matchステージで、 cuisineフィールドの値が"Bakery"であるドキュメントをフィルタリングします。

  • 一致するドキュメントをboroughフィールドでグループ化し、そのフィールドの個別の値ごとにドキュメントの数を生成する$groupステージ。

const bson_t *doc;
bson_t *pipeline = BCON_NEW("pipeline",
"[",
"{", "$match", "{", "cuisine", BCON_UTF8("Bakery"), "}", "}",
"{", "$group", "{",
"_id", BCON_UTF8("$borough"), "count", "{", "$sum", BCON_INT32(1), "}", "}",
"}",
"]");
mongoc_cursor_t *results =
mongoc_collection_aggregate(collection, MONGOC_QUERY_NONE, pipeline, NULL, NULL);
bson_error_t error;
if (mongoc_cursor_error(results, &error))
{
fprintf(stderr, "Aggregate failed: %s\n", error.message);
} else {
while (mongoc_cursor_next(results, &doc)) {
char *str = bson_as_canonical_extended_json(doc, NULL);
printf("%s\n", str);
bson_free(str);
}
}
bson_destroy(pipeline);
mongoc_cursor_destroy(results);

MongoDB が操作を実行する方法に関する情報を表示するには、パイプラインで explain操作を実行します。 MongoDB が操作 を説明すると、実行プランとパフォーマンス統計が返されます。実行プランは、 MongoDB が操作を完了できる潜在的な方法です。 MongoDB に操作を説明する ように指示すると、その操作のためにMongoDB が選択したプランと拒否された実行プランの両方が返されます。

次のコード例では、前のセクションと同じ集計を実行しますが、操作の詳細を説明するために mongoc_client_command_simple() 関数を使用しています。

bson_t reply;
bson_error_t error;
bson_t *command = BCON_NEW(
"aggregate", BCON_UTF8("restaurants"),
"explain", BCON_BOOL(true),
"pipeline",
"[",
"{", "$match", "{", "cuisine", BCON_UTF8("Bakery"), "}", "}",
"{", "$group", "{",
"_id", BCON_UTF8("$borough"), "count", "{", "$sum", BCON_INT32(1), "}", "}",
"}",
"]");
if (mongoc_client_command_simple(client, "sample_restaurants", command, NULL, &reply, &error)) {
char *str = bson_as_canonical_extended_json(&reply, NULL);
printf("%s\n", str);
bson_free(str);
} else {
fprintf(stderr, "Command failed: %s\n", error.message);
}
bson_destroy(command);
bson_destroy(&reply);

集計ステージの完全なリストについては、MongoDB Serverマニュアルの集計ステージを参照してください。

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

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

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