Docs Menu
Docs Home
/ / /
C++ ドライバー

集計によるデータの変換

項目一覧

  • Overview
  • 集計操作と検索操作
  • 制限
  • 集計の例
  • 集計の説明
  • 詳細情報
  • MongoDB Server マニュアル
  • API ドキュメント

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

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

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

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

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

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

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

  • 結果を並べ替える

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

  • 検索操作の実行

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

  • フィールドを計算する

  • データを要約する

  • 値をグループ化する

集計操作を使用するときは、次の制限に注意してください。

  • 返されたドキュメントは、 BSONドキュメントサイズの制限である16メガバイトに違反することはできません。

  • パイプライン ステージには、デフォルトで100メガバイトのメモリ制限があります。 この制限を超えるには、 mongocxx::options::aggregateインスタンスの allow_disk_useフィールドをtrueに設定します。

重要

$graphLookup の例外

$graphLookupステージは100メガバイトという厳格なメモリ制限があり、 allow_disk_useフィールドを無視します。

注意

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

集計を実行するには、集計ステージを含むmongocxx::pipelineインスタンスをcollection.aggregate()メソッドに渡します。

次のコード例では、ニューヨークの各地区のケーキの数のカウントを生成します。 そのために、次のステージを含む集計パイプラインを使用します。

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

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

mongocxx::pipeline stages;
stages.match(make_document(kvp("cuisine", "Bakery")))
.group(make_document(kvp("_id", "$borough"), kvp("count", make_document(kvp("$sum", 1)))));
auto cursor = collection.aggregate(stages);
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : "Brooklyn", "count" : 173 }
{ "_id" : "Queens", "count" : 204 }
{ "_id" : "Bronx", "count" : 71 }
{ "_id" : "Staten Island", "count" : 20 }
{ "_id" : "Missing", "count" : 2 }
{ "_id" : "Manhattan", "count" : 221 }

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

集計操作を説明するには、 BSONドキュメントでコマンドを指定し、それを引数としてrun_command()メソッドに渡して、 explainデータベースコマンドを実行します。

次の例では、 MongoDBに、前述の集計の例の集計操作を説明するように指示します。

mongocxx::pipeline stages;
stages.match(make_document(kvp("cuisine", "Bakery")))
.group(make_document(kvp("_id", "$borough"), kvp("count", make_document(kvp("$sum", 1)))));
auto command = make_document(
kvp("explain", make_document(
kvp("aggregate", "restaurants"),
kvp("pipeline", stages.view_array()),
kvp("cursor", make_document()))));
auto result = db.run_command(command.view());
std::cout << bsoncxx::to_json(result) << std::endl;
{ "explainVersion" : "2", "queryPlanner" : { "namespace" : "sample_restaurants.restaurants",
"indexFilterSet" : false, "parsedQuery" : { "cuisine" : { "$eq" : "Bakery" } }, "queryHash":
"...", "planCacheKey" : "...", "optimizedPipeline" : true, "maxIndexedOrSolutionsReached":
false, "maxIndexedAndSolutionsReached" : false, "maxScansToExplodeReached" : false,
"winningPlan" : { ... }
... }

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

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

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

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

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

戻る

複合インデックス