集計
Overview
このガイドでは、MongoDB Node.js ドライバーで集計操作を使用する方法を学ぶことができます。
集計操作は、MongoDB での結果の縮小や要約に使用できる式です。MongoDB の集計フレームワークでは、1 つ以上のステージからなるパイプラインを作成できます。各ステージはデータに対して特定の操作を実行します。
アナロジー
集計パイプラインは自動車工場に似たものとして考えることができます。自動車製造では、組み立てラインとして編成された複数の組み立てステーションを利用する必要があります。それぞれのステーションには、ドリルや溶接機など、特定の工程のための専用の工具が備えられています。工場は最初の部品を作り替え、組み立てて、完成品にします。
集計パイプラインは組み立てライン、集計ステージは組み立て作業所、式演算子は特殊ツールです。
集計とクエリ操作の比較
find()
メソッドなどのクエリ操作を使用すると、次のアクションを実行できます。
どのドキュメントを返すかを選ぶ
どのフィールドを返すかを選ぶ
結果を並べ替える
集計操作を使用すると、次のアクションを実行できます。
すべてのクエリ操作を実行する
フィールドの名前を変更する
フィールドを計算する
データを要約する
値をグループ化する
集計操作にはいくつかの制限があります。
返されるドキュメントは、 16メガバイトのBSON ドキュメント サイズ制限に違反していない必要があります。
パイプライン ステージには、デフォルトで 100 メガバイトのメモリ制限があります。この制限を超えるには、
AggregateOptions
のallowDiskUse
プロパティをtrue
に設定します。詳細については AggregateOptions API ドキュメントを参照してください。
参考文献
式演算子の完全なリストを表示するには、サーバー マニュアルの「集計演算子」を参照してください。
集計パイプラインの組み立てと例については、サーバー マニュアルの「集計パイプライン」を参照してください。
パイプライン ステージの作成の詳細については、サーバー マニュアルの「集計ステージ」を参照してください。
実行可能な例
この例では、レストランに関するサンプルデータを使用します。下記のコードでは、 aggregation
データベースの restaurants
コレクションにデータを挿入します。
const db = client.db("aggregation"); const coll = db.collection("restaurants"); // Create sample documents const docs = [ { stars: 3, categories: ["Bakery", "Sandwiches"], name: "Rising Sun Bakery" }, { stars: 4, categories: ["Bakery", "Cafe", "Bar"], name: "Cafe au Late" }, { stars: 5, categories: ["Coffee", "Bakery"], name: "Liz's Coffee Bar" }, { stars: 3, categories: ["Steak", "Seafood"], name: "Oak Steakhouse" }, { stars: 4, categories: ["Bakery", "Dessert"], name: "Petit Cookie" }, ]; // Insert documents into the restaurants collection const result = await coll.insertMany(docs);
Tip
MongoDBデプロイへの接続の詳細については、 ガイドを参照してください。
集計の例
集計を実行するには、集計ステージのリストを collection.aggregate()
メソッドに渡します。
この例では、集計パイプラインでは以下の集計ステージが使用されます:
$matchステージで、
categories
配列フィールドに要素Bakery
を含むドキュメントをフィルタリングします。一致するドキュメントを
stars
フィールドでグループ化し、stars
の個別の値ごとにドキュメントの数を累積する$groupステージ。
// Define an aggregation pipeline with a match stage and a group stage const pipeline = [ { $match: { categories: "Bakery" } }, { $group: { _id: "$stars", count: { $sum: 1 } } } ]; // Execute the aggregation const aggCursor = coll.aggregate(pipeline); // Print the aggregated results for await (const doc of aggCursor) { console.log(doc); }
この例では、次の出力が生成されます。
{ _id: 4, count: 2 } { _id: 3, count: 1 } { _id: 5, count: 1 }
詳細については、「 aggregate() API ドキュメント 」を参照してください。
その他の例
一般的な集計タスクの各段階の説明については、集計チュートリアルを参照してください。
MongoDB ウェブサイトの「 Node.js チュートリアルを使用した集計フレームワーク」ブログ記事に別の集計パイプラインの例があります。