文档菜单
文档首页
/ / /
Node.js 驱动程序
/

聚合

在本页中

  • 概述
  • 类比
  • 比较聚合和查询操作
  • 参考文献
  • 可运行示例
  • 聚合示例
  • 其他示例

在本指南中,您可以了解如何在MongoDB Node.js驱动程序中使用聚合操作

聚合操作是您可以使用它们在MongoDB中生成减少和汇总结果的表达式。MongoDB的聚合框架允许您创建一个管道,该管道由一个或多个阶段组成,每个阶段都对您的数据进行特定操作。

您可以想象聚合管道类似于一个汽车工厂。汽车制造需要使用组织成装配线的装配站。每个站都有专业工具,如钻床和焊接机。工厂将初始零件和材料转换为成品。

聚合管道是装配线,聚合阶段是装配站,而表达式运算符是专业工具。

使用查询操作,如find() 方法,您可以执行以下操作

  • 选择要返回的 文档

  • 选择要返回的 字段

  • 对结果进行排序

使用聚合操作,您可以执行以下操作

  • 执行所有查询操作

  • 重命名字段

  • 计算字段

  • 汇总数据

  • 分组值

聚合操作有一些限制:

  • 返回的文档不得违反 16 兆字节的 BSON 文档大小限制

  • 默认情况下,管道阶段具有 100 兆字节的内存限制。您可以通过将 AggregateOptionsallowDiskUse 属性设置为 true 来超出此限制。有关更多详细信息,请参阅 AggregateOptions API 文档

重要

$graphLookup 异常

$graphLookup 阶段具有严格的 100 兆字节内存限制,并将忽略 allowDiskUse

要查看表达式运算符的完整列表,请参阅服务器手册中的 聚合运算符

了解如何构建聚合管道和查看示例,请参阅服务器手册中的聚合管道,链接为Aggregation Pipeline

要了解有关创建管道阶段的更多信息,请参阅服务器手册中的聚合阶段

本例使用关于餐厅的样本数据。以下代码将数据插入到聚合数据库中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);

提示

有关连接到您的MongoDB部署的更多信息,请参阅连接指南.

要执行聚合,请将聚合阶段列表传递给collection.aggregate()方法。

在本例中,聚合管道使用了以下聚合阶段

  • 一个$match阶段,用于筛选出categories数组字段包含元素Bakery的文档。

  • 一个$group阶段,用于按stars字段对匹配的文档进行分组,并累计每个不同的stars值对应的文档数量。

// 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 教程](https://mongodb.ac.cn/blog/post/quick-start-nodejs--mongodb--how-to-analyze-data-using-the-aggregation-framework)。

返回

承诺