完整教程:【MongoDB实战】5.2 常用聚合阶段实战

《MongoDB实战入门》第5章 进阶查询:聚合管道与数据统计分析

5.2 常用聚合阶段实战

  • 聚合管道的核心价值在于通过不同阶段的组合实现复杂数据处理。
  • 本节聚焦最常用的聚合阶段($match$project$group$sort$limit/$skip),结合电商订单场景拆解每个阶段的核心用法、语法要点与实战代码,所有案例均基于5.1节创建的orders集合。
    • 若未创建,需先执行5.1节的 “前置准备:创建测试数据集” 代码。

前置回顾:测试数据集结构

// 快速查看订单集合结构
db.orders.findOne();

在这里插入图片描述

5.2.1 $match:筛选数据(管道的“前置过滤器”)

核心作用
  • 作为聚合管道的起始阶段(最优实践),筛选符合条件的文档,减少后续阶段需要处理的数据量,是聚合管道性能优化的关键。
  • 其查询条件语法与find()完全一致,但仅用于筛选文档(而非投影字段)。
语法格式
{
 $match: {
 <查询条件> } }
实战案例
  • 需求1:筛选“已支付”且订单金额大于1000元的订单
// 仅筛选,不做后续处理
db.orders.aggregate([
{

$match: {

status: "已支付", // 等值匹配
amount: {
 $gt: 1000 } // 金额>1000
}
}
]);

在这里插入图片描述

  • 需求2:筛选2025年1月2日创建的所有订单
db.orders.aggregate([
{

$match: {

create_time: {

$gte: ISODate("2025-01-02T00:00:00Z"),
$lte: ISODate("2025-01-02T23:59:59Z")
}
}
}
]);

在这里插入图片描述

关键注意事项
  • $match应尽可能放在管道起始位置,先过滤再计算;

  • 支持所有find()的查询操作符($eq$gt$in$and等),例如:{ $match: { category: { $in: ["电子产品", "服装"] } } }

5.2.2 $project:字段投影与重命名

核心作用

控制文档的字段显示/隐藏、重命名字段、新增计算字段,重塑文档结构,是聚合管道中“调整输出格式”的核心阶段。

语法格式
{

$project: {

<字段1>: 1/0, // 1=显示,0=隐藏(_id默认显示,需设为0隐藏)
  <新字段名>: "$原字段名", // 重命名字段
    <计算字段>: <表达式> // 新增基于原字段的计算字段
      }
      }
实战案例
  • 需求1:仅显示订单ID、商品分类、订单金额,并重命名amount订单金额,隐藏_id
db.orders.aggregate([
{
 $match: {
 status: "已支付" } }, // 先筛选
{

$pr
posted on 2026-01-22 18:45  ljbguanli  阅读(0)  评论(0)    收藏  举报