Docs Menu
Docs Home
/ / /
Node.js ドライバー
/

集計

項目一覧

  • Overview
  • アナロジー
  • 集計とクエリ操作の比較
  • 参考文献
  • 実行可能な例
  • 集計の例
  • その他の例

このガイドでは、MongoDB Node.js ドライバーで集計操作を使用する方法を学ぶことができます

集計操作は、MongoDB での結果の縮小や要約に使用できる式です。MongoDB の集計フレームワークでは、1 つ以上のステージからなるパイプラインを作成できます。各ステージはデータに対して特定の操作を実行します。

集計パイプラインは自動車工場に似たものとして考えることができます。自動車製造では、組み立てラインとして編成された複数の組み立てステーションを利用する必要があります。それぞれのステーションには、ドリルや溶接機など、特定の工程のための専用の工具が備えられています。工場は最初の部品を作り替え、組み立てて、完成品にします。

集計パイプラインは組み立てライン、集計ステージは組み立て作業所、式演算子は特殊ツールです。

find() メソッドなどのクエリ操作を使用すると、次のアクションを実行できます。

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

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

  • 結果を並べ替える

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

  • すべてのクエリ操作を実行する

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

  • フィールドを計算する

  • データを要約する

  • 値をグループ化する

集計操作にはいくつかの制限があります。

重要

$graphLookup の例外

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

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

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

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

この例では、レストランに関するサンプルデータを使用します。下記のコードでは、 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 チュートリアルを使用した集計フレームワーク」ブログ記事に別の集計パイプラインの例があります。

戻る

Promise