Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル

集計によるデータの変換

項目一覧

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

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

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

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

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

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

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

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

  • 結果を並べ替える

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

  • 検索操作の実行

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

  • フィールドを計算する

  • データを要約する

  • 値をグループ化する

集計操作を実行する際には、次の制限を考慮してください。

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

  • パイプライン ステージには、デフォルトで100メガバイトのメモリ制限があります。 この制限を超えるには、 allowDiskUseオプションをtrueに設定するオプション配列を作成し、その配列をMongoDB\Collection::aggregate()メソッドに渡します。

    重要

    $graphLookup の例外

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

注意

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

集計を実行するには、パイプラインステージを含む配列をMongoDB\Collection::aggregate()メソッドに渡します。

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

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

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

$pipeline = [
['$match' => ['cuisine' => 'Bakery']],
['$group' => ['_id' => '$borough', 'count' => ['$sum' => 1]]],
];
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_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が実行したプランと拒否された実行プランの両方が返されます。

集計操作を説明するには、 MongoDB\Operation\Aggregateオブジェクトを作成し、データベース、コレクション、パイプラインステージをパラメーターとして渡します。 次に、 MongoDB\Operation\AggregateオブジェクトをMongoDB\Collection::explain()メソッドに渡します。

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

$pipeline = [
['$match' => ['cuisine' => 'Bakery']],
['$group' => ['_id' => '$borough', 'count' => ['$sum' => 1]]],
];
$aggregate = new MongoDB\Operation\Aggregate(
$collection->getDatabaseName(),
$collection->getCollectionName(),
$pipeline
);
$result = $collection->explain($aggregate);
echo json_encode($result), PHP_EOL;
{"explainVersion":"2","queryPlanner":{"namespace":"sample_restaurants.restaurants",
"indexFilterSet":false,"parsedQuery":{"cuisine":{"$eq":"Bakery"}},"queryHash":"865F14C3",
"planCacheKey":"D56D6F10","optimizedPipeline":true,"maxIndexedOrSolutionsReached":false,
"maxIndexedAndSolutionsReached":false,"maxScansToExplodeReached":false,"winningPlan":{
... }

MongoDB PHPライブラリを使用して複雑な集計パイプラインを作成するチュートリアルについては、 MongoDB Developer Center の「 MongoDB Ops PHPとMongoDBを使用した複雑な集計パイプライン 」を参照してください。

このガイドで説明されているトピックについて詳しくは、 MongoDB Serverマニュアルの次のページ を参照してください。

このガイドで説明されているメソッドの詳細については、次のAPIドキュメントを参照してください。

  • MongoDB\Collection::aggregate()

  • MongoDB\Collection::explain()

戻る

データベースコマンドの実行