MongoDB 聚合

MongoDB 的聚合框架允许你对数据执行复杂的操作,包括分组、过滤和排序。本章将详细介绍如何使用 MongoDB 的聚合管道来处理数据。

聚合管道简介

聚合管道由一系列文档处理阶段组成,每个阶段都会修改通过管道的数据流。管道处理的数据流类似于 Unix 管道:输入一个文档,经过一系列阶段的处理,最终输出结果文档。这些阶段可以按顺序组合在一起,形成一个聚合管道。

示例

假设我们有一个包含用户评论的集合 reviews,我们想要找出每个用户的平均评分。

在这个示例中,我们使用了 $group 阶段来按 user_id 分组,并计算每个用户的平均评分。

聚合阶段详解

$match

$match 阶段用于过滤出符合特定条件的文档。这与 SQL 查询中的 WHERE 子句类似。

示例

如果我们只想查看评分高于 4 的评论:

$sort

$sort 阶段用于对输出文档进行排序。可以指定多个字段进行排序,每个字段后跟 1(升序)或 -1(降序)。

示例

如果我们要按用户 ID 升序排列并按评分降序排列:

$limit

$limit 阶段用于限制返回的文档数量。这对于分页查询非常有用。

示例

如果我们只想查看前 5 个用户的平均评分:

$skip

$skip 阶段用于跳过指定数量的文档。通常与 $limit 结合使用,实现分页功能。

示例

如果我们想跳过前 5 个用户的平均评分,然后显示接下来的 5 个用户的平均评分:

$project

$project 阶段用于重定义输出文档的结构。可以用来添加新字段、修改现有字段或删除字段。

示例

如果我们只想保留 user_idaverageRating 字段:

$unwind

$unwind 阶段用于将数组字段拆分成多条记录。每个数组元素都会生成一条新的记录。

示例

假设我们有一个包含多个标签的 tags 数组字段,我们希望分别处理每个标签:

$lookup

$lookup 阶段用于执行左连接,从另一个集合中获取相关文档。这类似于 SQL 中的 JOIN 操作。

示例

如果我们有一个 users 集合和一个 reviews 集合,我们想要将评论与用户信息关联起来:

-- -------------------- ---- -------
----------------------
    - -------- -
        ----- --------
        ----------- ----------
        ------------- ------
        --- ------
    ---
    - -------- ------- --
    - --------- - -------- -- ----- - - -
--

以上便是 MongoDB 聚合框架的核心概念和用法。通过灵活运用这些阶段,你可以轻松地处理和分析复杂的数据集。

上一篇: MongoDB 排序 sort
下一篇: MongoDB 索引/搜索
纠错
反馈