前言
Mongoose 是基于 Node.js 平台的 MongoDB 的对象模型工具。Mongoose 提供了丰富的 API,用于在 Node.js 应用中对 MongoDB 进行建模,增删改查等操作。其中,Aggregate 方法是 Mongoose 提供的一个高级查询方法,具有强大的功能,在数据聚合和计算等方面有着广泛的应用。
本文将围绕 Mongoose 中的 Aggregate 方法进行讨论,主要包括 Aggregate 方法的基本用法、具体的聚合操作以及相关的注意事项。
基本用法
Aggregate 方法的基本用法如下:
Model.aggregate(pipeline, callback);
其中,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
: 将日期格式化为指定格式的字符串。
使用示例:
// $dateToString 日期操作 Model.aggregate([ { $project: { date: { $dateToString: { format: '%Y-%m-%d', date: '$dateField' } } } } ], function(err, result) { // ... });
注意事项
在使用 Mongoose 中的 Aggregate 方法时,需要注意以下几个方面:
- 聚合操作的管道是按照顺序执行的,后一个操作的输入是前一个操作的输出。
- 在管道中,每个操作对应一个 json 对象,其中包括操作符和参数两部分。
- 一般情况下,在管道的第一个位置使用
$match
等筛选操作,以减少后续操作的计算量。 - 在管道的最后使用
$project
等操作,以输出最终的结果。
结语
本文主要介绍了 Mongoose 中的 Aggregate 方法,涉及了聚合操作的各种用法和相关注意事项。希望读者能够通过阅读本文,更好地理解和掌握 Mongoose 的高级查询功能,从而在开发中更加得心应手。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67b6be1f306f20b3a62f4578