Docs Menu
Docs Home
/ / /
PyMongo

集計によるデータの変換

項目一覧

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

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

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

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

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

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

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

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

  • 結果を並べ替える

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

  • 検索操作の実行

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

  • フィールドを計算する

  • データを要約する

  • 値をグループ化する

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

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

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

重要

$graphLookup の例外

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

注意

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

集計を実行するには、集計ステージのリストを collection.aggregate() メソッドに渡します。

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

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

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

# Define an aggregation pipeline with a match stage and a group stage
pipeline = [
{ "$match": { "cuisine": "Bakery" } },
{ "$group": { "_id": "$borough", "count": { "$sum": 1 } } }
]
# Execute the aggregation
aggCursor = collection.aggregate(pipeline)
# Print the aggregated results
for document in aggCursor:
print(document)

上記のコード例では、次のような出力が生成されます。

{'_id': 'Bronx', 'count': 71}
{'_id': 'Brooklyn', 'count': 173}
{'_id': 'Missing', 'count': 2}
{'_id': 'Manhattan', 'count': 221}
{'_id': 'Queens', 'count': 204}
{'_id': 'Staten Island', 'count': 20}

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

集計操作を説明するには、次のいずれかを使用できます PyMongoExplain ライブラリまたはデータベースコマンド。各方法の例を表示するには、以下の対応するタブを選択します。

次の例に示すように、 pip を使用してpymongoexplainライブラリをインストールします。

python3 -m pip install pymongoexplain

次のコード例では、前述の集計の例を実行し、MongoDB によって返された説明を出力します。

# Define an aggregation pipeline with a match stage and a group stage
pipeline = [
{ "$match": { "cuisine": "Bakery" } },
{ "$group": { "_id": "$borough", "count": { "$sum": 1 } } }
]
# Execute the operation and print the explanation
result = ExplainableCollection(collection).aggregate(pipeline)
print(result)

次のコード例では、前述の集計の例を実行し、MongoDB によって返された説明を出力します。

# Define an aggregation pipeline with a match stage and a group stage
pipeline = [
{ $match: { cuisine: "Bakery" } },
{ $group: { _id: "$borough", count: { $sum: 1 } } }
]
# Execute the operation and print the explanation
result = database.command("aggregate", "collection", pipeline=pipeline, explain=True)
print(result)
...
'command': {'aggregate': 'collection',
'pipeline': [{'$match': {'cuisine': 'Bakery'}},
{'$group': {'_id': '$borough',
'count': {'$sum': 1}}}],
'explain': True,
...

Tip

Python のpprintモジュールを使用すると、説明結果を読みやすくできます。

import pprint
...
pprint.pp(result)

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

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

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

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

一般的な集計タスクの各段階の説明については、集計チュートリアル を参照してください。

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

戻る

クラスター化インデックス