Mongoose 中的聚合使用详解

前言

在开发 MongoDB 数据库的应用程序时,我们经常需要对数据进行聚合处理。Mongoose 是一个优秀的 Node.js ORM 库,它提供了许多用于聚合查询的 API。本文将深入介绍 Mongoose 中聚合查询的使用方法及其指导意义。

聚合查询的概念

聚合查询是一种跨文档合并数据并执行统计分析的方法。在 MongoDB 中,聚合查询的实现需要使用聚合管道(Aggregation Pipeline)来模拟 SQL 中的 GROUP BY 和 JOIN 等操作。聚合管道是 Mongoose 中的一个重要概念,它是一系列操作步骤的组合,每个步骤都是一个聚合操作符。

聚合管道操作符

Mongoose 中聚合管道操作符分为三类:数据操作、逻辑操作和算术操作。这里介绍常用的几个聚合操作符:

数据操作

  • $match:筛选符合条件的文档。
  • $project:映射和筛选需要的字段。
  • $unwind:将数组拆分成单个文档。
  • $group:根据指定字段进行分组统计,并输出计算结果。
  • $lookup:执行关联查询,实现 SQL 中的 JOIN 操作。
  • $sort:按指定字段排序。

逻辑操作

  • $and:逻辑与操作。
  • $or:逻辑或操作。
  • $not:逻辑非操作。
  • $expr:使用表达式计算。

算术操作

  • $add:求和。
  • $subtract:求差。
  • $multiply:求积。
  • $divide:求商。

聚合查询示例

下面通过一个例子来演示 Mongoose 中的聚合查询。

首先创建一个模型,模型名为 User。

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

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

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

假设我们需要统计每个性别的总薪资,并按降序排序。

使用聚合管道中的操作符,代码如下:

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

上述代码中,我们使用 $match 筛选出所有文档,$project 进行字段映射和筛选,$group 根据 gender 字段进行分组,并计算每组的总薪资,$sort 对计算结果进行降序排序。运行结果如下:

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

结论

聚合查询是 MongoDB 中非常重要的一部分,也是 Mongoose 中的一个重要功能。在实际开发中,我们经常会使用聚合查询来对数据进行统计和分析。对于 Node.js 开发者来说,熟练掌握 Mongoose 中聚合查询的操作将大大提高开发效率。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673585c40bc820c5824ee56a