NVIDIA srt-slurm:SLURM集群声明式基准测试框架详解
2026/7/26 3:52:41
MongoDB 聚合管道(Aggregation Pipeline)是实现复杂数据聚合、统计、转换的核心机制,其本质是多阶段(Stage)组成的顺序执行流水线,核心逻辑可概括为:
$match、$group、$project)定义,仅负责单一职责(筛选、分组、投影、排序等),阶段顺序直接影响结果正确性和查询性能(例如:先$match过滤数据再$group,可减少分组计算的数据量)。聚合管道的核心公式可简化为:
原始数据→阶段1(处理)→阶段2(处理)→...→阶段N(处理)→最终结果MongoDB 普通查询(find()/findOne())和聚合管道(aggregate())是两种核心数据查询方式,其核心区别和适用场景如下表所示:
| 维度 | 普通查询(find) | 聚合管道(aggregate) |
|---|---|---|
| 核心能力 | 数据筛选、字段投影(仅包含/排除)、排序分页 | 多阶段数据处理(筛选、分组、计算、转换) |
| 计算能力 | 无(仅能返回原始数据) | 支持复杂聚合计算(求和、计数、平均值、去重等) |
| 结果形态 | 返回原始文档(可投影字段,但结构不变) | 可动态生成新文档结构(新增计算字段、嵌套结构等) |
| 性能特点 | 轻量快速,适合简单查询 | 支持阶段优化(如先过滤后分组),适合复杂统计 |
| 适用场景 | 1. 单条件/多条件筛选原始数据 2. 简单分页查询 3. 仅需返回部分字段的场景 | 1. 数据分组统计(如按分类统计销售额) 2. 多集合关联查询($lookup) 3. 数据转换/清洗(如字段重命名、格式标准化) 4. 复杂指标计算(如平均值、中位数、去重计数) |
首先创建电商订单集合(orders),插入测试数据,模拟真实业务场景:
// 1. 切换到测试数据库use test_db;// 2. 插入订单数据(共6条,包含不同用户、商品分类、金额、时间)db.orders.insertMany([{order_id:"OD001",user_id:101,category:"电子产品",amount:2999,create_time:ISODate("2025-01-01T10:00:00Z"),status:"已支付"},{order_id:"OD002",user_id:102,category:"电子产品",amount:1999,create_time:ISODate("2025-01-02T11:00:00Z"