Mongoose 中的 Aggregate 方法详解

阅读时长 8 分钟读完

前言

Mongoose 是基于 Node.js 平台的 MongoDB 的对象模型工具。Mongoose 提供了丰富的 API,用于在 Node.js 应用中对 MongoDB 进行建模,增删改查等操作。其中,Aggregate 方法是 Mongoose 提供的一个高级查询方法,具有强大的功能,在数据聚合和计算等方面有着广泛的应用。

本文将围绕 Mongoose 中的 Aggregate 方法进行讨论,主要包括 Aggregate 方法的基本用法、具体的聚合操作以及相关的注意事项。

基本用法

Aggregate 方法的基本用法如下:

其中,Model 表示定义的数据模型,pipeline 表示聚合操作的管道,callback 表示聚合完成后的回调函数。

聚合操作

Mongoose 中的 Aggregate 方法支持的聚合操作非常丰富,主要包括以下几类:

算术操作

  • $add: 对输入的值相加,生成和。
  • $subtract: 从输入的第一个值之中,依次减去其余的值,生成差。
  • $multiply: 对输入的值相乘,生成积。
  • $divide: 对输入的第一个值相除,得到商。

使用示例:

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

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

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

-- ------- ----
------------------ -------- ----------- ---------- --- ------------- ------- -
  -- ---
---
展开代码

比较操作

  • $cmp: 比较两个值,如果第一个值小于第二个值,则返回 -1;如果第一个值等于第二个值,则返回 0;否则返回 1。
  • $eq: 比较两个值是否相等。
  • $ne: 比较两个值是否不相等。
  • $gt: 比较两个值大小,如果第一个值大于第二个值,则返回 true,否则返回 false。
  • $gte: 比较两个值大小,如果第一个值大于或等于第二个值,则返回 true,否则返回 false。
  • $lt: 比较两个值大小,如果第一个值小于第二个值,则返回 true,否则返回 false。
  • $lte: 比较两个值大小,如果第一个值小于或等于第二个值,则返回 true,否则返回 false。

使用示例:

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

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

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

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

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

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

-- ---- ----
------------------ ----- ----------- ---------- --- ------------- ------- -
  -- ---
---
展开代码

日期操作

  • $year: 从日期中获取年份。
  • $month: 从日期中获取月份。
  • $dayOfMonth: 从日期中获取日期号。
  • $hour: 从日期中获取小时数。
  • $minute: 从日期中获取分钟数。
  • $second: 从日期中获取秒数。
  • $millisecond: 从日期中获取毫秒数。

使用示例:

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

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

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

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

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

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

-- ------------ ----
------------------ ------------- ------------ --- ------------- ------- -
  -- ---
---
展开代码

数组操作

  • $arrayElemAt: 从数组中获取指定位置的元素。
  • $size: 获取数组的长度。

使用示例:

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

-- ----- ----
------------------ ------ ------------- --- ------------- ------- -
  -- ---
---
展开代码

逻辑操作

  • $cond: 判断条件,根据条件返回不同的结果。
  • $ifNull: 判断值是否为 null,如果为 null,则返回指定的默认值。

使用示例:

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

-- ------- ----
------------------ -------- ----------- ----------- --- ------------- ------- -
  -- ---
---
展开代码

字符串操作

  • $toLower: 将字符串转换为小写。
  • $toUpper: 将字符串转换为大写。

使用示例:

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

-- -------- -----
------------------ --------- ------- --- ------------- ------- -
  -- ---
---
展开代码

日期操作

  • $dateToString: 将日期格式化为指定格式的字符串。

使用示例:

注意事项

在使用 Mongoose 中的 Aggregate 方法时,需要注意以下几个方面:

  • 聚合操作的管道是按照顺序执行的,后一个操作的输入是前一个操作的输出。
  • 在管道中,每个操作对应一个 json 对象,其中包括操作符和参数两部分。
  • 一般情况下,在管道的第一个位置使用 $match 等筛选操作,以减少后续操作的计算量。
  • 在管道的最后使用 $project 等操作,以输出最终的结果。

结语

本文主要介绍了 Mongoose 中的 Aggregate 方法,涉及了聚合操作的各种用法和相关注意事项。希望读者能够通过阅读本文,更好地理解和掌握 Mongoose 的高级查询功能,从而在开发中更加得心应手。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b6be1f306f20b3a62f4578

纠错
反馈

纠错反馈